//| Copyright: (C) 2019-2020 Kevin Larke //| License: GNU GPL version 3.0 or above. See the accompanying LICENSE file. #ifndef cmGrTksbFltk_h #define cmGrTksbFltk_h class Fl_Menu_Bar; class cmdIf; class cmGrTksbFltk : public cmGrPlotFltk, public gvHashFuncArg { public: cmGrTksbFltk(cmCtx_t* ctx, cmdIf* cp, Fl_Menu_Bar* menuBar, int x, int y, int w, int h); virtual ~cmGrTksbFltk(); void setTksbHandle( void* vp ); virtual cmScMsgTypeId_t recvScoreMsg( const void* msg, unsigned msgByteCnt ); virtual double sampleRate() const; virtual bool on_plot_object( cmGrPlotCbArg_t* arg ); typedef enum { kInvalidTId, kSelectTId, kRefreshTId, } cbTId_t; cbTId_t cbTypeId() const; virtual unsigned scoreSelectedEleIndex() const; virtual void setScoreLocation( unsigned locIdx, unsigned vel, unsigned smpIdx ); private: enum { kOkRC, kInsertObjFailRC }; enum { kPitchMId, kAttrMId, kDynMId, kLocIdxMId, kFracMId, kSectEvenMId, kSectDynMId, kSectTempoMId, kMenuItemCnt }; typedef struct { cmGrTksbFltk* p; int id; } item_t; typedef enum { kEventTksbId, kSectionTksbId, kTakeTksbId } tksbId_t; typedef struct scObj_str { tksbId_t id; union { const cmScoreEvt_t* ep; const cmScoreSection_t* sp; unsigned tlMarkerUid; } u; scObj_str( const cmScoreEvt_t* e) : id(kEventTksbId) { u.ep=e;} scObj_str( const cmScoreSection_t* s) : id(kSectionTksbId) { u.sp=s;} scObj_str( unsigned i ) : id(kTakeTksbId) { u.tlMarkerUid=i;} } scObj_t; cmErr_t _err; //cmdIf* _cmdIf; cmTakeSeqBldrH_t _tksbH; Fl_Menu_Bar* _menuBar; unsigned _samplesMetricId; unsigned _secondsMetricId; double _objSecs; unsigned _objId; bool _togFl; cmGrPlObjH_t _lastBarPlotObjH; item_t _menuArray[ kMenuItemCnt ]; unsigned _nextTakeY; cbTId_t _curCbTId; void _insertSection( const cmScoreSection_t* s ); void _insertEvent( const cmScoreEvt_t* m ); void _insertTake( const cmTksbScTrkTake_t* take ); void _createMenu(); bool _isMenuChecked( int id ); void _setEventLabels(); void _setSectionLabels(); cmGrPlObjH_t _scEvtIdxToPlotObj( unsigned scEvtIdx ); static void _s_menuCallback(Fl_Widget* w, void* arg); }; #endif