//
// Created by Krad on 2021/10/11.
//

#ifndef GUI_EVENTCENTER_H
#define GUI_EVENTCENTER_H

#include <QObject>

#define ADD_EVENT()\
ADD_EVENT_VALUE(RequestLogin)\
ADD_EVENT_VALUE(LoginRoleChanged)\
ADD_EVENT_VALUE(PatientSelected)\
ADD_EVENT_VALUE(RequestPreviewScan)\
ADD_EVENT_VALUE(RequestEmptyScan)\
ADD_EVENT_VALUE(RequestPatientScan)\
ADD_EVENT_VALUE(RequestStop)\
ADD_EVENT_VALUE(ResponseDeviceTemperature)\
ADD_EVENT_VALUE(ResponsePreview)\
ADD_EVENT_VALUE(ResponsePreviewData)\
ADD_EVENT_VALUE(ResponseStop)\
ADD_EVENT_VALUE(DeviceErrorRaise)\
ADD_EVENT_VALUE(ShimLibInnerFault)\
ADD_EVENT_VALUE(InvokeOperationStart)\
ADD_EVENT_VALUE(InvokeOperationProgress)\
ADD_EVENT_VALUE(InvokeOperationEnd)\
ADD_EVENT_VALUE(PromptDialogOpen)\
ADD_EVENT_VALUE(GlobalBannerMessage)\
ADD_EVENT_VALUE(ReloadLanguage)\
ADD_EVENT_VALUE(WarnStateFlagChange)\
ADD_EVENT_VALUE(GUIErrorRaise)

enum GUIEvents {
#define ADD_EVENT_VALUE(val) val,
	ADD_EVENT()
#undef ADD_EVENT_VALUE
};



class EventCenter :public QObject {
	Q_OBJECT
public:
	static EventCenter* Default() {
		static EventCenter instance;
		return &instance;
	}
	void triggerEvent(GUIEvents event, QObject* sender, QObject* data);
signals:
#define ADD_EVENT_VALUE(val)\
    void val(QObject* sender,QObject* data);
	ADD_EVENT()
#undef ADD_EVENT_VALUE

};


#endif //GUI_EVENTCENTER_H
