//
// C++ Interface: signal_manager
//
// Description: 
//
//
// Author: Messenger of death aka Denis A. Birukov <messengerofdeath@gmail.com>, (C) 2008
//
// Copyright: See COPYING file that comes with this distribution
//
//
#ifndef SIGNAL_MANAGER
#define SIGNAL_MANAGER
#include "abstractslot.h"
#include "me_signal.h"
/** 
 * Регистрирует слот с указанным именем
 * @param slot_name имя под которым будет зарегистрирован слот
 * @param slot указатель на слот
 * @author Denis A. Birukov aka Messenger of death
 * @date 25.06.2008
 */
bool register_slot(const SlotName &slot_name, AbstractSlot *slot);

/** 
 * Отменяет регистрацию слота. Также удаляются все связи сигналов с данным слотом
 * @param slot_name имя слота которое требуется удалить
 * @author Denis A. Birukov aka Messenger of death
 * @date 14.03.2009
 */
bool unregister_slot(const SlotName &slot_name);

/** 
 * Соединяет слот с сигналом
 * @param signal_name имя сигнала, который надо подсоединить
 * @param slot_name имя слота, к которому надо присоединить сигнал
 * @author Denis A. Birukov aka Messenger of death
 * @date 25.06.2008
 */
void connect(const SignalName &signal_name, const SlotName &slot_name);

/** 
 * Разъединяет слот и сигналом
 * @param signal_name имя сигнала, который надо отсоединить
 * @param slot_name имя слота, от которого требуется отсоединить сигнал
 * @author Denis A. Birukov aka Messenger of death
 * @date 25.06.2008
 */
void disconnect(const SignalName &signal_name, const SlotName &slot_name);

/** 
 * Вызывает указанный сигнал с указанными параметрами
 * @param signal_name имя сигнала, который надо вызвать
 * @param params указатель на список параметров сигнала
 * @author Denis A. Birukov aka Messenger of death
 * @date 25.06.2008
 */
bool rise_signal(SignalName &signal_name, SlotArgs *params);

/** 
 * Посылает указанный сигнал конкретному слоту.
 * @param signal_name имя сигнала, который надо вызвать
 * @param params указатель на список параметров сигнала
 * @author Denis A. Birukov aka Messenger of death
 * @date 25.06.2008
 */
bool send_signal_to(SignalName &signal_name, SlotArgs *params, SlotName &slot_name);


#endif
