#ifndef Fl_DevCfgGroup_h #define Fl_DevCfgGroup_h #include class Fl_DevCfgGroup : public Fl_Group { public: Fl_DevCfgGroup(cmDevCfgH_t dcH, int x, int y, int w, int h, const char* label ); virtual ~Fl_DevCfgGroup(); void onEnableAudio(bool enableFl ); private: enum { kInvalidCId, kLocLabelCId, kLocMenuCId, kLocStringCId, kLocStoreBtnCId, kLocDeleteBtnCId, kMidiLabelCId, kMidiCfgMenuCId, kMidiDeleteBtnCId, kMidiCfgStringCId, kMidiApplyBtnCId, kMidiCfgDescCId, kMidiDevMenuCId, kMidiDevLabelCId, kMidiPortMenuCId, kMidiPortLabelCId, kMidiInputCheckCId, kAudioLabelCId, kAudioCfgMenuCId, kAudioDeleteBtnCId, kAudioCfgDescCId, kAudioCfgStringCId, kAudioApplyBtnCId, kAudioInDevMenuCId, kAudioInDevLabelCId, kAudioOutDevMenuCId, kAudioOutDevLabelCId, kAudioMsgQueSizeValCId, kAudioDevFpCValCId, kAudioDspFpCValCId, kAudioBufCntValCId, kAudioSrateMenuCId, kAudioSyncInCheckCId, kAudioNetNodeStringCId, kAudioBcastAddrStringCId, kAudioIpAddrStringCId, kAudioIpPortValCId, kAudioActiveCheckCId, /* kNetLabelCId, kNetCfgMenuCId, kNetDeleteBtnCId, kNetCfgDescCId, kNetCfgStringCId, kNetApplyBtnCId, kNetSockAddrStringCId, kNetPortNumbValCId, kNetLocalCheckCId, kNetActiveCheckCId */ }; typedef struct { unsigned id; Fl_DevCfgGroup* p; union { Fl_Button* btn; Fl_Check_Button* chk; Fl_Box* box; Fl_Menu_Button* mbt; Fl_Input* inp; Fl_Value_Input* val; } u; } ctl_t; cmDevCfgH_t _dcH; std::vector< ctl_t* > _ctlV; bool _loadLocBtn(); void _recallLoc(); void _storeLoc(); void _deleteLoc(); void _loadMidiDevBtn(); void _loadMidiPortBtn(); void _loadAudioDevBtn( unsigned id, unsigned devIdx ); void _loadAudioSrateBtn(); void _loadCfgMenu(cmTypeDcmId_t typeId, unsigned menuCtlId, unsigned deleteCtlId ); void _syncLoc(); void _createMidiCfg(); void _createAudioCfg(); //void _createNetCfg(); void _deleteCfg( cmTypeDcmId_t typeId, unsigned menuCtlId, unsigned inpCtlCId, unsigned descCtlId, unsigned storeCtlId, unsigned deleteCtlId ); void _recallCfg( cmTypeDcmId_t typeId, unsigned menuCtlId, unsigned strCtlId, unsigned descCtlId, unsigned storeCtlId ); // Attempt to set the menu to index 'val' otherwise attempt to set it to 'dfltVal' // Finish by updating the label. void _restoreMenuValue( unsigned menuCtlId, int val, int dfltVal=0 ); // Get the current string value of the menu btn. const char* _menuBtnValueStr( unsigned menuCtlId ); // Copy the menu btn's current string value to the label (and the input control) void _setMenuBtnLabel( unsigned menuCtlId, unsigned inpCtlId = cmInvalidId ); // Set the menu buttons value to 'string' and update the menu btn's label void _setMenuBtnWithString( unsigned menuCtlId, const char* string ); void _setCheckCtl( unsigned ctlId, int val ); void _setValueCtl( unsigned ctlId, double val ); void _setInputCtl( unsigned ctlId, const cmChar_t* val ); const cmChar_t* _getMenuCtl( unsigned ctlId ); const cmChar_t* _getInputCtl( unsigned ctlId ); double _getValueCtl( unsigned ctlId ); bool _getCheckCtl( unsigned ctlId ); double _getSrate(); void _setSrate( double srate ); void _enableStoreBtn( unsigned ctlId ); ctl_t* _idToCtl(unsigned id); static void _s_ctl_cb( Fl_Widget* w, void* arg ); }; // Init: // 1) Load all menu X btns and set to first entry. // 2) set cfg string X to string value of cfg menu // 3) update desc and X fields. // // Cfg: // Store: // 1) call cmDevCfgNameX( cfg_label ) successfully // 2) reload cfg menu // 3) set cfg menu label to new cfg_label // // Recall: // 1) set cfg menu X label // 2) set cfg string X to string value of cfg menu // 3) update desc and X fields // // Delete: // 1) call cmDevDeleteX( cfg_label ) sucessfuly. // 2) reload cfg menu and set to first entry // 3) set cfg string X to string value of cfg menu // 4) update desc and X fields // // #endif