diff --git a/doc/examples/piobject.cpp b/doc/examples/piobject.cpp index 93107d1c..36e4ef11 100644 --- a/doc/examples/piobject.cpp +++ b/doc/examples/piobject.cpp @@ -5,8 +5,8 @@ class ObjectA: public PIObject { PIOBJECT(ObjectA) public: EVENT_HANDLER1(void, handlerA, const PIString & , str) {piCoutObj << "handler A:" << str;} - EVENT2(eventA2, int, i, float, f); EVENT1(eventA1, const PIString & , str); + EVENT2(eventA2, int, i, float, f); }; class ObjectB: public PIObject { @@ -26,7 +26,11 @@ int main(int argc, char * argv[]) { CONNECT1(void, PIString, &obj_b, eventB, &obj_a, handlerA); obj_b.eventB("event to handler"); - CONNECT1(void, PIString, &obj_a, eventA1, &obj_b, eventB); + CONNECTU(&obj_a, eventA1, &obj_b, eventB); obj_a.eventA1("event to event"); + + obj_a.piDisconnect("eventA1"); + CONNECTL(&obj_a, eventA1, ([](const PIString & str){piCout << str;})); + obj_a.eventA1("event to lambda"); }; //! [main] diff --git a/libs/main/core/piobject.cpp b/libs/main/core/piobject.cpp index 0c225048..700a5ff8 100644 --- a/libs/main/core/piobject.cpp +++ b/libs/main/core/piobject.cpp @@ -40,22 +40,49 @@ //! \~english //! %PIObject provide notification mechanism similar Qt but implemented //! on language capabilities without any special preprocessors or compilers. -//! Any class inherits PIObject should use macro \a PIOBJECT() immediate +//! Any class inherits %PIObject should use macro \a PIOBJECT() immediate //! after declaration to proper compile. //! -//! Event is a some abstract event that can be raised at any time. -//! Event is a function but declared with special macro \a EVENT(). +//! Event is a some abstract event that can be raised at any time as common method. +//! Event is a function but declared with special macro \a EVENT() and don`t need definition. //! To raise event simply execute event function. //! //! Event handler is a function but declared with special macro -//! \a EVENT_HANDLER(). You can use event handlers as ordinary functions. +//! \a EVENT_HANDLER(). It need definition as common method. +//! You can use event handlers as ordinary functions. //! //! Main goal of this mechanism is perform abstract connections between -//! various objects. This functionality provide macro \a CONNECT() which +//! various objects. This functionality provide macro \a CONNECT(), \a CONNECTU() and \a CONNECTL() which //! connect some event of first object to some event handler or event of //! second object. Each event can be connected any times to any event handlers. //! +//! * \a CONNECT() macros family work with explicit subclasses of %PIObject with compile-time check of events and handlers +//! * \a CONNECTU() macro can work implicit subclasses of %PIObject with run-time check of events and handlers +//! * \a CONNECTU_QUEUED() macro similar to \a CONNECTU() macro but queue execution with performer object instead of handler direct call +//! * \a CONNECTL() macro work with implicit subclasses of %PIObject and lambda-function +//! //! \~russian +//! %PIObject предоставляет механизм событий и их обработчиков, реализованный без +//! дополнительного препроцессора или метакомпилятора. Любой класс, наследованный +//! от %PIObject должен использовать макрос \a PIOBJECT() сразу после объявления +//! класса для корректной работы. +//! +//! Событием является сигнал, который может быть вызван как обычный метод в любое время. +//! Это метод, объявленный с помощью макроса \a EVENT() и не требует описания. +//! Для его вызова просто вызывается метод события. +//! +//! Обработчик события это метод, объявленный с помощью макроса \a EVENT_HANDLER() +//! и он требует описания, как и обычный метод. Можно его использовать как обычный метод. +//! +//! Основной функцией этого механизма является реализация соединений между различными объектами. +//! Её предоставляют макросы \a CONNECT(), \a CONNECTU() и \a CONNECTL(), которые соединяют +//! события одних объектов с обработчиками или событиями других объектов. Каждое событие +//! может быть присоеденино неограниченное количество раз к любым обработчикам. +//! +//! * \a CONNECT() семейство макросов работает с явными наследниками %PIObject, и проверяет соединение во время компиляции +//! * \a CONNECTU() макрос может работать с неявными наследниками %PIObject, и проверяет соединение во время исполнения +//! * \a CONNECTU_QUEUED() макрос подобен \a CONNECTU(), но планирует вызов обработчика у объекта performer вместо прямого вызова +//! * \a CONNECTL() макрос может работать с неявными наследниками %PIObject и лямбда-функцией //! //! \~\image html events_handlers.png //! @@ -69,7 +96,8 @@ //! handler B: 2 , 0.5 //! handler A: event to handler //! handler A: event to event -//! \~\endcode +//! event to lambda +//! \endcode //! \} diff --git a/libs/main/core/piobject_macros.h b/libs/main/core/piobject_macros.h index 00291656..2f440b72 100644 --- a/libs/main/core/piobject_macros.h +++ b/libs/main/core/piobject_macros.h @@ -1,5 +1,5 @@ /*! \file piobject_macros.h - * \brief Base object + * \~\brief Base object * * This file declare macros for PIObject */ @@ -29,67 +29,127 @@ #ifdef DOXYGEN -/// \relatesalso PIObject \brief you should use this macro after class declaration to use EVENT and EVENT_HANDLER and correct piCoutObj output +//! \relatesalso PIObject +//! \~\brief +//! \~english You should use this macro after class declaration to use EVENT and EVENT_HANDLER and correct piCoutObj output +//! \~russian Необходимо использовать этот макрос после объявления класса для использования событийной системы и корректного вывода piCoutObj #define PIOBJECT(name) -/// \relatesalso PIObject \brief you should use this macro after class declaration to use EVENT and EVENT_HANDLER of parent class, and \a scopeList() +//! \relatesalso PIObject +//! \~\brief +//! \~english You should use this macro after class declaration to use EVENT and EVENT_HANDLER of parent class, and \a scopeList() +//! \~russian #define PIOBJECT_SUBCLASS(name, parent) -/// \relatesalso PIObject \brief declare event handler \"event\" with name \"name\" and return type \"ret\", ret name() +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event handler with name \"name\" and return type \"ret\", ret name() +//! \~russian Объявляет обработчик событий с именем \"name\" и возвращаемым типом \"ret\", ret name() #define EVENT_HANDLER0(ret, name) ret name() -/// \relatesalso PIObject \brief declare event handler \"event\" with name \"name\" and return type \"ret\", ret name(type0 var0) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event handler with name \"name\" and return type \"ret\", ret name(type0 var0) +//! \~russian Объявляет обработчик событий с именем \"name\" и возвращаемым типом \"ret\", ret name(type0 var0) #define EVENT_HANDLER1(ret, name, type0, var0) ret name(type0 var0) -/// \relatesalso PIObject \brief declare event handler \"event\" with name \"name\" and return type \"ret\", ret name(type0 var0, type1 var1) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event handler with name \"name\" and return type \"ret\", ret name(type0 var0, type1 var1) +//! \~russian Объявляет обработчик событий с именем \"name\" и возвращаемым типом \"ret\", ret name(type0 var0, type1 var1) #define EVENT_HANDLER2(ret, name, type0, var0, type1, var1) ret name(type0 var0, type1 var1) -/// \relatesalso PIObject \brief declare event handler \"event\" with name \"name\" and return type \"ret\", ret name(type0 var0, type1 var1, type2 var2) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event handler with name \"name\" and return type \"ret\", ret name(type0 var0, type1 var1, type2 var2) +//! \~russian Объявляет обработчик событий с именем \"name\" и возвращаемым типом \"ret\", ret name(type0 var0, type1 var1, type2 var2) #define EVENT_HANDLER3(ret, name, type0, var0, type1, var1, type2, var2) ret name(type0 var0, type1 var1, type2 var2) -/// \relatesalso PIObject \brief declare event handler \"event\" with name \"name\" and return type \"ret\", ret name(type0 var0, type1 var1, type2 var2, type3 var3) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event handler with name \"name\" and return type \"ret\", ret name(type0 var0, type1 var1, type2 var2, type3 var3) +//! \~russian Объявляет обработчик событий с именем \"name\" и возвращаемым типом \"ret\", ret name(type0 var0, type1 var1, type2 var2, type3 var3) #define EVENT_HANDLER4(ret, name, type0, var0, type1, var1, type2, var2, type3, var3) ret name(type0 var0, type1 var1, type2 var2, type3 var3) -/// \relatesalso PIObject \brief EVENT_HANDLER is synonym of EVENT_HANDLER0 +//! \relatesalso PIObject +//! \~\brief +//! \~english Synonym of EVENT_HANDLER0 +//! \~russian Аналог EVENT_HANDLER0 #define EVENT_HANDLER EVENT_HANDLER0 -/// \relatesalso PIObject \brief declare virtual event handler \"event\" with name \"name\" and return type \"ret\", virtual ret name() +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare virtual event handler with name \"name\" and return type \"ret\", virtual ret name() +//! \~russian Объявляет виртуальный обработчик событий с именем \"name\" и возвращаемым типом \"ret\", virtual ret name() #define EVENT_VHANDLER0(ret, name) virtual ret name() -/// \relatesalso PIObject \brief declare virtual event handler \"event\" with name \"name\" and return type \"ret\", virtual ret name(type0 var0) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare virtual event handler with name \"name\" and return type \"ret\", virtual ret name(type0 var0) +//! \~russian Объявляет виртуальный обработчик событий с именем \"name\" и возвращаемым типом \"ret\", virtual ret name(type0 var0) #define EVENT_VHANDLER1(ret, name, type0, var0) virtual ret name(type0 var0) -/// \relatesalso PIObject \brief declare virtual event handler \"event\" with name \"name\" and return type \"ret\", virtual ret name(type0 var0, type1 var1) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare virtual event handler with name \"name\" and return type \"ret\", virtual ret name(type0 var0, type1 var1) +//! \~russian Объявляет виртуальный обработчик событий с именем \"name\" и возвращаемым типом \"ret\", virtual ret name(type0 var0, type1 var1) #define EVENT_VHANDLER2(ret, name, type0, var0, type1, var1) virtual ret name(type0 var0, type1 var1) -/// \relatesalso PIObject \brief declare virtual event handler \"event\" with name \"name\" and return type \"ret\", virtual ret name(type0 var0, type1 var1, type2 var2) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare virtual event handler with name \"name\" and return type \"ret\", virtual ret name(type0 var0, type1 var1, type2 var2) +//! \~russian Объявляет виртуальный обработчик событий с именем \"name\" и возвращаемым типом \"ret\", virtual ret name(type0 var0, type1 var1, type2 var2) #define EVENT_VHANDLER3(ret, name, type0, var0, type1, var1, type2, var2) virtual ret name(type0 var0, type1 var1, type2 var2) -/// \relatesalso PIObject \brief declare virtual event handler \"event\" with name \"name\" and return type \"ret\", virtual ret name(type0 var0, type1 var1, type2 var2, type3 var3) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare virtual event handler with name \"name\" and return type \"ret\", virtual ret name(type0 var0, type1 var1, type2 var2, type3 var3) +//! \~russian Объявляет виртуальный обработчик событий с именем \"name\" и возвращаемым типом \"ret\", virtual ret name(type0 var0, type1 var1, type2 var2, type3 var3) #define EVENT_VHANDLER4(ret, name, type0, var0, type1, var1, type2, var2, type3, var3) virtual ret name(type0 var0, type1 var1, type2 var2, type3 var3) -/// \relatesalso PIObject \brief EVENT_VHANDLER is synonym of EVENT_VHANDLER0 +//! \relatesalso PIObject +//! \~\brief +//! \~english Synonym of EVENT_VHANDLER0 +//! \~russian Аналог EVENT_VHANDLER0 #define EVENT_VHANDLER EVENT_VHANDLER0 -/// \relatesalso PIObject \brief declare event \"event\" with name \"name\", void name(); +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event with name \"name\", void name(); +//! \~russian Объявляет событие с именем \"name\", void name(); #define EVENT0(name) void name(); -/// \relatesalso PIObject \brief declare event \"event\" with name \"name\", void name(type0 var0); +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event with name \"name\", void name(type0 var0); +//! \~russian Объявляет событие с именем \"name\", void name(type0 var0); #define EVENT1(name, type0, var0) void name(type0 var0); -/// \relatesalso PIObject \brief declare event \"event\" with name \"name\", void name(type0 var0, type1 var1); +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event with name \"name\", void name(type0 var0, type1 var1); +//! \~russian Объявляет событие с именем \"name\", void name(type0 var0, type1 var1); #define EVENT2(name, type0, var0, type1, var1) void name(type0 var0, type1 var1); -/// \relatesalso PIObject \brief declare event \"event\" with name \"name\", void name(type0 var0, type1 var1, type2 var2); +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event with name \"name\", void name(type0 var0, type1 var1, type2 var2); +//! \~russian Объявляет событие с именем \"name\", void name(type0 var0, type1 var1, type2 var2); #define EVENT3(name, type0, var0, type1, var1, type2, var2) void name(type0 var0, type1 var1, type2 var2); -/// \relatesalso PIObject \brief declare event \"event\" with name \"name\", void name(type0 var0, type1 var1, type2 var2, type3 var3); +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event with name \"name\", void name(type0 var0, type1 var1, type2 var2, type3 var3); +//! \~russian Объявляет событие с именем \"name\", void name(type0 var0, type1 var1, type2 var2, type3 var3); #define EVENT4(name, type0, var0, type1, var1, type2, var2, type3, var3) void name(type0 var0, type1 var1, type2 var2, type3 var3); -/// \relatesalso PIObject \brief EVENT is synonym of EVENT0 +//! \relatesalso PIObject +//! \~\brief +//! \~english Synonym of EVENT0 +//! \~russian Аналог EVENT0 #define EVENT EVENT0 @@ -101,89 +161,217 @@ #define RAISE_EVENT RAISE_EVENT0 -/// \relatesalso PIObject \brief connect event \"event\" from object \"src\" to event handler \"handler\". \"Event\" and \"handler\" must has equal argument lists. -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler or event \"handler\" of object \"dest\". +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" объекта \"dest\". +//! \~\details +//! \~english +//! \"handler\" can handle subset arguments of \"event\". +//! Returns \a PIObject::Connection +//! \~russian +//! \"handler\" может принимать не все аргументы от \"event\". +//! Возвращает \a PIObject::Connection #define CONNECTU(src, event, dest, handler) -/// \relatesalso PIObject \brief connect event \"event\" from object \"src\" to event handler \"handler\". -/// Event handler will be executed by \"performer\". \"Event\" and \"handler\" must has equal argument lists. -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler or event \"handler\" of object \"dest\". +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" объекта \"dest\". +//! \~\details +//! \~english +//! \"handler\" can handle subset arguments of \"event\". +//! Event handler will be executed by \"performer\" when \a PIObject::callQueuedEvents() called. +//! All argument types should be registered by \a REGISTER_VARIANT() macro, but many +//! common and PIP types already done. +//! Returns \a PIObject::Connection +//! \~russian +//! \"handler\" может принимать не все аргументы от \"event\". +//! Обработчик будет вызван объектом \"performer\" при вызове \a PIObject::callQueuedEvents(). +//! Все типы аргументов должны быть зарегистрированы с помощью макроса \a REGISTER_VARIANT(), +//! однако многие стандартные и PIP типы уже там. +//! Возвращает \a PIObject::Connection #define CONNECTU_QUEUED(src, event, dest, handler, performer) -/// \relatesalso PIObject \brief connect event \"event\" from object \"src\" to lambda-expression \"functor\". \"Event\" and \"functor\" must has equal argument lists. -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to lambda-expression \"functor\". +//! \~russian Соединяет событие \"event\" объекта \"src\" к лямбда-функции \"functor\". +//! \~\details +//! \~english +//! \"event\" and \"functor\" must has equal argument lists. +//! You should parentness \"functor\" with () if this is complex lambda. +//! Returns \a PIObject::Connection +//! \~russian +//! \"event\" и \"functor\" должны иметь одинаковые аргументы. +//! В случае сложной лямбда-функции оберните её (). +//! Возвращает \a PIObject::Connection #define CONNECTL(src, event, functor) -/// \relatesalso PIObject \brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" с проверкой наличия события и обработчика. +//! \~\details +//! Returns PIObject::Connection #define CONNECT0(ret, src, event, dest, handler) -/// \relatesalso PIObject \brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" с проверкой наличия события и обработчика. +//! \~\details +//! Returns PIObject::Connection #define CONNECT1(ret, type0, src, event, dest, handler) -/// \relatesalso PIObject \brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" с проверкой наличия события и обработчика. +//! \~\details +//! Returns PIObject::Connection #define CONNECT2(ret, type0, type1, src, event, dest, handler) -/// \relatesalso PIObject \brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" с проверкой наличия события и обработчика. +//! \~\details +//! Returns PIObject::Connection #define CONNECT3(ret, type0, type1, type2, src, event, dest, handler) -/// \relatesalso PIObject \brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists. -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists. +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" с проверкой наличия события и обработчика. +//! \~\details +//! Returns PIObject::Connection #define CONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler) -/// \relatesalso PIObject \brief CONNECT is synonym of CONNECT0 +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Synonym of \a CONNECT0 +//! \~russian Аналог \a CONNECT0 #define CONNECT CONNECT0 -/// \relatesalso PIObject \brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" без проверки наличия события и обработчика. #define WEAK_CONNECT0(ret, src, event, dest, handler) -/// \relatesalso PIObject \brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" без проверки наличия события и обработчика. #define WEAK_CONNECT1(ret, type0, src, event, dest, handler) -/// \relatesalso PIObject \brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" без проверки наличия события и обработчика. #define WEAK_CONNECT2(ret, type0, type1, src, event, dest, handler) -/// \relatesalso PIObject \brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" без проверки наличия события и обработчика. #define WEAK_CONNECT3(ret, type0, type1, type2, src, event, dest, handler) -/// \relatesalso PIObject \brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" без проверки наличия события и обработчика. #define WEAK_CONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler) -/// \relatesalso PIObject \brief WEAK_CONNECT is synonym of WEAK_CONNECT0 +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Synonym of \a WEAK_CONNECT0 +//! \~russian Аналог \a WEAK_CONNECT0 #define WEAK_CONNECT WEAK_CONNECT0 -/// \relatesalso PIObject \brief piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \relatesalso PIObject +//! \~\brief +//! \~english piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \~russian piDisconnect событие \"event\" объекта \"src\" от обработчика или события \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" #define DISCONNECT0(ret, src, event, dest, handler) -/// \relatesalso PIObject \brief piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \relatesalso PIObject +//! \~\brief +//! \~english piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \~russian piDisconnect событие \"event\" объекта \"src\" от обработчика или события \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" #define DISCONNECT1(ret, type0, src, event, dest, handler) -/// \relatesalso PIObject \brief piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \relatesalso PIObject +//! \~\brief +//! \~english piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \~russian piDisconnect событие \"event\" объекта \"src\" от обработчика или события \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" #define DISCONNECT2(ret, type0, type1, src, event, dest, handler) -/// \relatesalso PIObject \brief piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \relatesalso PIObject +//! \~\brief +//! \~english piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \~russian piDisconnect событие \"event\" объекта \"src\" от обработчика или события \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" #define DISCONNECT3(ret, type0, type1, type2, src, event, dest, handler) -/// \relatesalso PIObject \brief piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \relatesalso PIObject +//! \~\brief +//! \~english piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \~russian piDisconnect событие \"event\" объекта \"src\" от обработчика или события \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" #define DISCONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler) -/// \relatesalso PIObject \brief DISCONNECT is synonym of DISCONNECT0 +//! \relatesalso PIObject +//! \~\brief +//! \~english Synonym of \a DISCONNECT0 +//! \~russian Аналог \a DISCONNECT0 #define DISCONNECT DISCONNECT0 -/// \relatesalso PIObject \brief Returns pointer to events handler \"handler\" +//! \relatesalso PIObject +//! \~\brief +//! \~english Returns pointer to events handler \"handler\" +//! \~russian Возвращает указатель на обработчик события \"handler\" #define HANDLER(handler) -#define PIOBJECT(name) -#define PIOBJECT_SUBCLASS(name) - - #else