#pragma once #include typedef enum { bShowHelp, bMoveLight, bLookFromLight, bDots, bTurbo, LAST_BOOL } bool_t; typedef enum { fRayPathLength, LAST_NUMBER } number_t; enum { IDC_GEN_BUTTON = -4, IDC_RESET_BUTTON, IDC_SAVE_BUTTON, IDC_LOAD_BUTTON }; #define CHARBUF 100 // The max length of a line in the save file typedef float (*CONVERTER)(float a); typedef void (*ONCHANGE_CALLBACK)(void); float noconvert(float a); // { return a; } float convert100(float a); float convert10(float a); float convert1(float a); float convertNSamples(float a); float convertDepthResolution(float a); void OnChange(); // {} class Parameters { bool bparam[LAST_BOOL]; wchar_t bname[LAST_BOOL][CHARBUF]; int param[LAST_NUMBER]; // 0..100 (0..num_steps) wchar_t name[LAST_NUMBER][CHARBUF]; int numsteps[LAST_NUMBER]; CONVERTER ffunc[LAST_NUMBER]; ONCHANGE_CALLBACK chfunc[LAST_NUMBER+3]; CDXUTDialog* g_HUD; bool bSilent; const static int CHARBUFFER_SIZE = 200; enum { checkboxID0 = 1000, sliderID0 = 2000, staticID0 = 3000, upID0 = 4000, downID0 = 5000 }; public: void Setup( CDXUTDialog* g_HUD ); void Setup( CDXUTDialog* g_HUD, ONCHANGE_CALLBACK OnReset, ONCHANGE_CALLBACK OnSave = OnChange, ONCHANGE_CALLBACK OnLoad = OnChange); bool Get( bool_t i ); float Get( number_t i ); int GetInt( number_t i ); void SetBool( bool_t ID, bool b ); void SetFloat( number_t ID, float v ); void SetInt( number_t ID, int v ); void Add( bool_t ID, char* label, char cHotKey = 0 ); void Add( number_t ID, char* label, int num_steps); void Add( number_t ID, char* label, int num_steps, CONVERTER ff, ONCHANGE_CALLBACK chf = OnChange ); void Add( number_t ID, char* label, int num_steps, char cKeyDecr, char cKeyIncr, CONVERTER ff = noconvert, ONCHANGE_CALLBACK chf = OnChange ); void UpdateFromHUD( int controlID ); void SaveToFile( char* fileName ); void LoadFromFile( char* fileName ); };