Covellite++  Version: 2.3.0 Revision: 2580 Platform: x64 Build: 15:23 16.10.2020
Кроссплатформенный фреймворк для разработки приложений на С++
Граф связей класса Events:

Группы

 Type
 
 Id
 
 Params
 

Классы

class  covellite::events::Events::Signal
 Класс входит в проект Covellite.Events
Вспомогательный класс для доступа к сигналу конкретного события. Подробнее...
 
class  covellite::events::Events::Signals
 Класс входит в проект Covellite.Events
Вспомогательный класс, хранящий список всех сигналов. Подробнее...
 
class  covellite::events::Events
 Класс входит в проект Covellite.Events
Класс для работы с событиями фреймворка. Подробнее...
 
class  covellite::events::IEvents
 Класс входит в проект Covellite.Events
Интерфейсный класс для классов, которые должны использовать события фреймворка. Подробнее...
 

Подробное описание

Группа классов проекта Covellite.Events.

Использование событий фреймворка

Создание нового типа событий

Для создания пользовательского типа событий следует создать класс типа событий (в котором определить идентификаторы событий этого типа) и объявить объект нового типа событий (для удобства использования в этом же классе можно определить класс-контейнер параметров, передаваемых этому событию).

// Класс типа события.
class UserType_t final
{
public:
// Идентификаторы событий.
enum Id
{
Error = 0,
};
public:
// Класс параметров события Error.
class Error final
{
public:
int Code;
::std::string Description;
};
};
// Вспомогательный объект для использования события UserType.Error (таким
// способом достигается уникальность событий, имеющих одинаковые
// имена/численные значения в разных классах, если же использовать просто
// UserType_t::Error, тип события будет соответствовать типу перечисления и
// не будет являться уникальным).
namespace { UserType_t UserType; }
Заметки
Разные типы событий могут иметь одинаковые идентификаторы (как имена, так и значения), события с такими идентификаторами будут считаться разными событиями.

Создание класса, который должен реагировать на события

Классу, который должен реагировать на события, необходимо добавить объект класса covellite::events::Events и проинициализировать его в конструкторе, параметром которого может быть один из интерфейсных классов разделов (covellite::app::IApplication, covellite::os::IWindow, covellite::api::IWindow, covellite::rocket::IWindow).

В случае необходимости 'передать дальше' объект событий (например, если требуется встроить клиентсткий код между окнами графического Api и окном GUI, который должен отрисовывать что-либо перед отрисовкой GUI), класс cледует унаследовать от covellite::events::IEvents и реализовать его виртуальный оператор, вернув объект событий.

Заметки
Объект событий в классе хранит все созданные в нем соединения и разрывает их при уничтожении объекта класса (в случае необходимости изменения логики работы программы следует удалить существующий объект событий и создать новый, установив ему новые обработчики событий).
class Window final
{
private:
public:
explicit Window(const covellite::api::IWindow & _Window) :
m_Events(_Window)
{
m_Events[UserType.Error].Connect([](const UserType_t::Error &)
{
// Сюда поместить код обработки события UserType.Error.
});
}
};

Активация события

Для активации события необходимо вызвать оператор () из функции любого класса, содержащего объект класса событий. В качестве параметра (который предусмотрен только один) может быть передан объект любого класса (тип должен совпадать с типом, указанным у обработчика, в противном случае будет сгенерировано исключение).

covellite::api::Window ApiWindow{ ... };
Window Window{ ApiWindow };
const UserType_t::Error Description = { 5, "Error description" }.
Window[UserType.Error](Description);

Рекомендации

covellite::api::Window
Класс входит в проект Covellite.Api Класс окна-фасада для скрытия реализаций конкретных графических...
Definition: Window.hpp:43
covellite::api::IWindow
Класс входит в проект Covellite.Api Интерфейсный класс для всех окон, реализующих различные графиче...
Definition: IWindow.hpp:35
covellite::events::Events
Класс входит в проект Covellite.Events Класс для работы с событиями фреймворка.
Definition: Events.hpp:36