Programmable real-time audio signal processing application
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Fl_DevCfgGroup.h 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. //| Copyright: (C) 2019-2020 Kevin Larke <contact AT larke DOT org>
  2. //| License: GNU GPL version 3.0 or above. See the accompanying LICENSE file.
  3. #ifndef Fl_DevCfgGroup_h
  4. #define Fl_DevCfgGroup_h
  5. #include <vector>
  6. class Fl_DevCfgGroup : public Fl_Group
  7. {
  8. public:
  9. Fl_DevCfgGroup(cmDevCfgH_t dcH, int x, int y, int w, int h, const char* label );
  10. virtual ~Fl_DevCfgGroup();
  11. void onEnableAudio(bool enableFl );
  12. private:
  13. enum
  14. {
  15. kInvalidCId,
  16. kLocLabelCId,
  17. kLocMenuCId,
  18. kLocStringCId,
  19. kLocStoreBtnCId,
  20. kLocDeleteBtnCId,
  21. kMidiLabelCId,
  22. kMidiCfgMenuCId,
  23. kMidiDeleteBtnCId,
  24. kMidiCfgStringCId,
  25. kMidiApplyBtnCId,
  26. kMidiCfgDescCId,
  27. kMidiDevMenuCId,
  28. kMidiDevLabelCId,
  29. kMidiPortMenuCId,
  30. kMidiPortLabelCId,
  31. kMidiInputCheckCId,
  32. kAudioLabelCId,
  33. kAudioCfgMenuCId,
  34. kAudioDeleteBtnCId,
  35. kAudioCfgDescCId,
  36. kAudioCfgStringCId,
  37. kAudioApplyBtnCId,
  38. kAudioInDevMenuCId,
  39. kAudioInDevLabelCId,
  40. kAudioOutDevMenuCId,
  41. kAudioOutDevLabelCId,
  42. kAudioMsgQueSizeValCId,
  43. kAudioDevFpCValCId,
  44. kAudioDspFpCValCId,
  45. kAudioBufCntValCId,
  46. kAudioSrateMenuCId,
  47. kAudioSyncInCheckCId,
  48. kAudioNetNodeStringCId,
  49. kAudioBcastAddrStringCId,
  50. kAudioIpAddrStringCId,
  51. kAudioIpPortValCId,
  52. kAudioActiveCheckCId,
  53. /*
  54. kNetLabelCId,
  55. kNetCfgMenuCId,
  56. kNetDeleteBtnCId,
  57. kNetCfgDescCId,
  58. kNetCfgStringCId,
  59. kNetApplyBtnCId,
  60. kNetSockAddrStringCId,
  61. kNetPortNumbValCId,
  62. kNetLocalCheckCId,
  63. kNetActiveCheckCId
  64. */
  65. };
  66. typedef struct
  67. {
  68. unsigned id;
  69. Fl_DevCfgGroup* p;
  70. union
  71. {
  72. Fl_Button* btn;
  73. Fl_Check_Button* chk;
  74. Fl_Box* box;
  75. Fl_Menu_Button* mbt;
  76. Fl_Input* inp;
  77. Fl_Value_Input* val;
  78. } u;
  79. } ctl_t;
  80. cmDevCfgH_t _dcH;
  81. std::vector< ctl_t* > _ctlV;
  82. bool _loadLocBtn();
  83. void _recallLoc();
  84. void _storeLoc();
  85. void _deleteLoc();
  86. void _loadMidiDevBtn();
  87. void _loadMidiPortBtn();
  88. void _loadAudioDevBtn( unsigned id, unsigned devIdx );
  89. void _loadAudioSrateBtn();
  90. void _loadCfgMenu(cmTypeDcmId_t typeId, unsigned menuCtlId, unsigned deleteCtlId );
  91. void _syncLoc();
  92. void _createMidiCfg();
  93. void _createAudioCfg();
  94. //void _createNetCfg();
  95. void _deleteCfg( cmTypeDcmId_t typeId, unsigned menuCtlId, unsigned inpCtlCId, unsigned descCtlId, unsigned storeCtlId, unsigned deleteCtlId );
  96. void _recallCfg( cmTypeDcmId_t typeId, unsigned menuCtlId, unsigned strCtlId, unsigned descCtlId, unsigned storeCtlId );
  97. // Attempt to set the menu to index 'val' otherwise attempt to set it to 'dfltVal'
  98. // Finish by updating the label.
  99. void _restoreMenuValue( unsigned menuCtlId, int val, int dfltVal=0 );
  100. // Get the current string value of the menu btn.
  101. const char* _menuBtnValueStr( unsigned menuCtlId );
  102. // Copy the menu btn's current string value to the label (and the input control)
  103. void _setMenuBtnLabel( unsigned menuCtlId, unsigned inpCtlId = cmInvalidId );
  104. // Set the menu buttons value to 'string' and update the menu btn's label
  105. void _setMenuBtnWithString( unsigned menuCtlId, const char* string );
  106. void _setCheckCtl( unsigned ctlId, int val );
  107. void _setValueCtl( unsigned ctlId, double val );
  108. void _setInputCtl( unsigned ctlId, const cmChar_t* val );
  109. const cmChar_t* _getMenuCtl( unsigned ctlId );
  110. const cmChar_t* _getInputCtl( unsigned ctlId );
  111. double _getValueCtl( unsigned ctlId );
  112. bool _getCheckCtl( unsigned ctlId );
  113. double _getSrate();
  114. void _setSrate( double srate );
  115. void _enableStoreBtn( unsigned ctlId );
  116. ctl_t* _idToCtl(unsigned id);
  117. static void _s_ctl_cb( Fl_Widget* w, void* arg );
  118. };
  119. // Init:
  120. // 1) Load all menu X btns and set to first entry.
  121. // 2) set cfg string X to string value of cfg menu
  122. // 3) update desc and X fields.
  123. //
  124. // Cfg:
  125. // Store:
  126. // 1) call cmDevCfgNameX( cfg_label ) successfully
  127. // 2) reload cfg menu
  128. // 3) set cfg menu label to new cfg_label
  129. //
  130. // Recall:
  131. // 1) set cfg menu X label
  132. // 2) set cfg string X to string value of cfg menu
  133. // 3) update desc and X fields
  134. //
  135. // Delete:
  136. // 1) call cmDevDeleteX( cfg_label ) sucessfuly.
  137. // 2) reload cfg menu and set to first entry
  138. // 3) set cfg string X to string value of cfg menu
  139. // 4) update desc and X fields
  140. //
  141. //
  142. #endif