#include "customgui_priority.h"
#include "c4d_string.h"
#include "c4d_gui.h"

static PriorityCustomGuiLib *lib_Priority = NULL;

static PriorityCustomGuiLib *CheckLib(LONG offset)
{
	return (PriorityCustomGuiLib*)CheckLib(CUSTOMGUI_PRIORITY, offset, (C4DLibrary**)&lib_Priority);
}

#define PriorityCall(b) 			PriorityCustomGuiLib *lib = CheckLib(LIBOFFSET(PriorityCustomGuiLib, b)); \
															if (!lib || !lib->b) return; \
															(((iPriorityData*)this)->*(lib->b))

#define PriorityCallR(a,b) 		PriorityCustomGuiLib *lib = CheckLib(LIBOFFSET(PriorityCustomGuiLib, b)); \
															if (!lib || !lib->b) return a; \
															return (((iPriorityData*)this)->*(lib->b))

#define PriorityGuiCall(b) 		PriorityCustomGuiLib *lib = CheckLib(LIBOFFSET(PriorityCustomGuiLib, b)); \
															if (!lib || !lib->b) return; \
															(((iPriorityCustomGui*)this)->*(lib->b))

#define PriorityGuiCallR(a,b) PriorityCustomGuiLib *lib = CheckLib(LIBOFFSET(PriorityCustomGuiLib, b)); \
															if (!lib || !lib->b) return a; \
															return (((iPriorityCustomGui*)this)->*(lib->b))


Bool PriorityCustomGui::SetValue(LONG lValueID, const GeData &data) { PriorityGuiCallR(FALSE, SetValue)(lValueID, data); }
GeData PriorityCustomGui::GetValue(LONG lValueID) { PriorityGuiCallR(GeData(), GetValue)(lValueID); }

Bool PriorityData::SetPriorityValue(LONG lValueID, const GeData &data) { PriorityCallR(FALSE, SetPriorityValue)(lValueID, data); } // same like above
GeData PriorityData::GetPriorityValue(LONG lValueID) { PriorityCallR(GeData(), GetPriorityValue)(lValueID); }
