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.

cmUiDrvrFltk.h 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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 cmUiDrvrFltk_h
  4. #define cmUiDrvrFltk_h
  5. class Fl_Tabs;
  6. class Fl_Widget;
  7. class Fl_Button;
  8. class Fl_Check_Button;
  9. class Fl_Menu_Button;
  10. class Fl_Select_Browser;
  11. class Fl_Box;
  12. class Fl_Input;
  13. class Fl_Value_Input;
  14. class Fl_Value_Slider;
  15. class Fl_Progress;
  16. class Fl_Vert_Progress;
  17. class Fl_File_Btn;
  18. class Fl_Text_Display;
  19. class cmUiDrvrFltk
  20. {
  21. public:
  22. cmUiDrvrFltk(cmCtx_t* ctx, Fl_Tabs* tabs, cmUiDriverFunc_t cbFunc, void* cbArg);
  23. virtual ~cmUiDrvrFltk();
  24. void setBaseWindow( Fl_Tabs* tabs );
  25. void setCallback( cmUiDriverFunc_t cbFunc, void* cbArg );
  26. static cmUiRC_t cmUiDriverFunc( void* arg, const cmUiDriverArg_t* a );
  27. private:
  28. struct panel_str;
  29. typedef struct ctl_str
  30. {
  31. cmUiCId_t cId; // control type id
  32. unsigned usrId; // user id
  33. unsigned flags; // flags from this controls create call.
  34. struct panel_str* pnl; // parent panel
  35. Fl_Widget* wdgt; // this controls FLTK wdgt ptr
  36. cmUiDriverArg_t cbArg; // cached callback arg. recd used by this ctl
  37. struct ctl_str* link; // panel.ctls list link
  38. union
  39. {
  40. Fl_Button* btn;
  41. Fl_Check_Button* chk;
  42. Fl_Menu_Button* mbt;
  43. Fl_Select_Browser* lst;
  44. Fl_Box* lbl;
  45. Fl_Input* str;
  46. Fl_Text_Display* con;
  47. Fl_Value_Input* num;
  48. Fl_Value_Slider* sld;
  49. Fl_Progress* prg;
  50. Fl_Progress* mtr;
  51. Fl_File_Btn* fnb;
  52. } u;
  53. } ctl_t;
  54. typedef struct panel_str
  55. {
  56. cmUiDrvrFltk* drvr; // parent driver object
  57. Fl_Group* grp; // panel Widget
  58. unsigned appId; // id of the app. this panel serves
  59. unsigned usrId; // panels id
  60. int x_offs; // left control border
  61. int y_offs; // top control border
  62. ctl_t* ctls; // this panels control list
  63. cmUiDriverArg_t cbArg; // cached callback arg recd used by this ctl
  64. struct panel_str* link; // links used by _panels
  65. } panel_t;
  66. cmErr_t _err; //
  67. Fl_Tabs* _tabs; // Fl_Tabs Widget containing the panels
  68. cmUiDriverFunc_t _cbFunc; // application event callback function
  69. void* _cbArgs; //
  70. panel_t* _panels; // panel list
  71. ctl_t _dummy; //
  72. void _insertNewCtl( panel_t* pp, ctl_t* ctl, Fl_Widget* wp, unsigned flags );
  73. bool _hasNoAlignFlags( unsigned flags ) const;
  74. cmUiRC_t _createCtl( const cmUiDriverArg_t* a );
  75. cmUiRC_t _destroyCtl( unsigned appId, unsigned panelId, unsigned usrId, bool deleteWindowEleFlag );
  76. cmUiRC_t _destroyCtl( panel_t* pp, unsigned usrId, bool deleteWindowEleFlag );
  77. cmUiRC_t _createPanel( const cmUiDriverArg_t* a );
  78. cmUiRC_t _setValueCtl( const cmUiDriverArg_t* a );
  79. cmUiRC_t _enableCtl( const cmUiDriverArg_t* a );
  80. cmUiRC_t _destroyAllPanels( bool deleteWindowEleFl );
  81. cmUiRC_t _destroyPanel(panel_t* pp, bool deleteWindowEleFl );
  82. cmUiRC_t _findPanel( unsigned appId, unsigned usrId, panel_t*& ppRef, panel_t*& prvPnlRef, bool errFl=true );
  83. cmUiRC_t _findCtl( panel_t* pp, unsigned usrId, ctl_t*& ctlRef, ctl_t*& prvCtlRef, bool errFl=true );
  84. void _doCb( ctl_t* ctl, cmUiDId_t dId, unsigned flags );
  85. static void _s_ctl_cb(Fl_Widget* wp, void* data );
  86. static void _s_tab_cb(Fl_Widget* wp, void* data );
  87. };
  88. #endif