//| Copyright: (C) 2019-2020 Kevin Larke //| License: GNU GPL version 3.0 or above. See the accompanying LICENSE file. #ifndef cmGrTksrFltk_h #define cmGrTksrFltk_h class Fl_Menu_Bar; class cmdIf; class cmGrTksrFltk : public cmGrPlotFltk, public gvHashFuncArg { public: cmGrTksrFltk(cmCtx_t* ctx, cmdIf* cp, Fl_Menu_Bar* menuBar, int x, int y, int w, int h); virtual ~cmGrTksrFltk(); void setTksbHandle( void* vp ); void refresh(); virtual double sampleRate() const; virtual bool on_plot_object( cmGrPlotCbArg_t* arg ); private: enum { kOkRC, kInsertObjFailRC, kClearPlotFailRC, kTksbFailRC }; enum { kPitchMId, kScEvtMId, kDeleteMId, kSustainMId, kSostenutoMId, kWriteMId, kReadMId, kMenuItemCnt }; typedef struct { cmGrTksrFltk* p; int id; } item_t; typedef enum { kInvalidTksrId, kNoteTksrId, kPedalTksrId, } tksrId_t; typedef struct scObj_str { tksrId_t id; union { unsigned rid; } u; scObj_str( tksrId_t i, unsigned rid ) : id(i) { u.rid=rid; } } scObj_t; cmErr_t _err; //cmdIf* _cmdIf; cmTakeSeqBldrH_t _tksbH; Fl_Menu_Bar* _menuBar; unsigned _samplesMetricId; unsigned _secondsMetricId; //double _objSecs; unsigned _objId; //bool _togFl; item_t _menuArray[ kMenuItemCnt ]; void _insertEvent( const cmTksbRend_t* m, double srate ); void _createMenu(); bool _isMenuChecked( int id ); void _setEventLabels(); void _write(); void _read(); void _insertPedal( unsigned long pedalMId ); static void _s_deleteSelectedEle( void* arg, cmGrPlObjH_t oh ); static void _s_menuCallback(Fl_Widget* w, void* arg); }; #endif