-Updated ClipSelector code, working on LaunchScene support

This commit is contained in:
Harry van Haaren 2013-08-22 05:48:59 +01:00
parent a641fcd8d3
commit 6ad3a0e11b
8 changed files with 68 additions and 7 deletions

View file

@ -79,7 +79,7 @@ class ClipSelector : public Fl_Button
public:
ClipSelector(int _x, int _y, int _w, int _h, const char *_label):
ClipSelector(int _x, int _y, int _w, int _h, const char *_label, bool master = false):
Fl_Button(_x, _y, _w, _h, _label)
{
x = _x;
@ -88,6 +88,7 @@ class ClipSelector : public Fl_Button
h = _h;
label = _label;
_master = master;
highlight = false;
mouseOver = false;
@ -99,6 +100,7 @@ class ClipSelector : public Fl_Button
static const int numClips = 10;
ClipState clips[numClips];
bool _master;
bool mouseOver;
bool highlight;
int x, y, w, h;
@ -121,7 +123,7 @@ class ClipSelector : public Fl_Button
clips[clipNum].setName();
break;
case GridLogic::STATE_STOPPED:
clips[clipNum].setName();
//clips[clipNum].setName();
break;
case GridLogic::STATE_EMPTY:
case GridLogic::STATE_PLAYING:
@ -285,6 +287,14 @@ class ClipSelector : public Fl_Button
// handle right clicks: popup menu
if ( Fl::event_state(FL_BUTTON3) )
{
if ( _master )
{
redraw();
return 1;
}
Fl_Menu_Item rclick_menu[] =
{
{ "Load" },
@ -353,6 +363,14 @@ class ClipSelector : public Fl_Button
}
else
{
if ( _master )
{
EventGridLaunchScene e( clipNum );
writeToDspRingbuffer( &e );
redraw();
return 1;
}
// write "pressed" event for this track,scene
EventGridEvent e( ID, clipNum, true );
writeToDspRingbuffer( &e );

View file

@ -32,6 +32,7 @@ namespace Event
GRID_EVENT, // press / release events
GRID_STATE, // state of one block
GRID_LAUNCH_SCENE,
TRACK_SEND,
TRACK_SIGNAL_LEVEL,
@ -129,6 +130,18 @@ class EventGridState : public EventBase
EventGridState(int t, int s, GridLogic::State st): track(t), scene(s), state(st) {}
};
class EventGridLaunchScene : public EventBase
{
public:
int type() { return int(GRID_LAUNCH_SCENE); }
uint32_t size() { return sizeof(EventGridLaunchScene); }
int scene;
EventGridLaunchScene(){};
EventGridLaunchScene(int s): scene(s){}
};
class EventFxReverb : public EventBase
{
public:

View file

@ -52,6 +52,12 @@ void handleDspEvents()
jack->getGridLogic()->released( ev.track, ev.scene );
} break; }
case Event::GRID_LAUNCH_SCENE: {
EventGridLaunchScene ev;
jack_ringbuffer_read( rbToDsp, (char*)&ev, sizeof(EventGridLaunchScene) );
jack->getGridLogic()->launchScene( ev.scene );
break; }
case Event::LOOPER_LOAD: {
if ( availableRead >= sizeof(EventLooperLoad) ) {
EventLooperLoad ev;

View file

@ -26,6 +26,30 @@ GridLogic::GridLogic()
}
void GridLogic::launchScene( int scene )
{
for(unsigned int t = 0; t < NTRACKS; t++ )
{
for(unsigned int s = 0; s < NSCENES; s++ )
{
LooperClip* lc = jack->getLooper( t )->getClip( s );
if ( s == scene )
lc->queuePlay();
//else
//lc->queueStop();
}
}
/*
for(unsigned int s = 0; s < NSCENES; s++ )
{
jack->getControllerUpdater()->setSceneState( -1, s, s );
}
*/
}
void GridLogic::pressed( int track, int scene )
{
LooperClip* lc = jack->getLooper( track )->getClip( scene );

View file

@ -46,6 +46,9 @@ class GridLogic : public TimeObserver
/// button release / click-release event
void released( int track, int scene );
/// master controls, launches a horizontal scene with one event
void launchScene( int scene );
/// GUI load event
void load(int track, int scene, AudioBuffer* ab);

View file

@ -282,7 +282,7 @@ void Jack::writeApcOutput( unsigned char* data )
}
else
{
EventGuiPrint e( "__FILE__ __LINE__ Buffer not valid" );
EventGuiPrint e( "Jack::writeApcOutput(): Buffer full!" );
writeToGuiRingbuffer( &e );
}
}

View file

@ -181,13 +181,12 @@ void LooperClip::queuePlay()
{
_queuePlay = true;
_queueStop = false;
_queueRecord = false;
}
void LooperClip::queueStop()
{
_queueStop = true;
_queuePlay = false;
_queueRecord = false;
}
void LooperClip::queueRecord()

View file

@ -20,8 +20,6 @@ TimeManager::TimeManager():
tapTempo[0] = 0;
tapTempo[1] = 0;
tapTempo[2] = 0;
cout << "TimeManager() done" << endl;
}