#include "Sequencer.h" #include "ConfigurationScreen.h" #include "colors.h" #include ConfigurationScreen::ConfigurationScreen(Sequencer& seq) : parent(seq) { } void ConfigurationScreen::keyPressed(unsigned char x, unsigned char y) { std::cout << "config clicked x=" << (int)x << ", y=" << (int)y << std::endl; if(x == 8) { // very right } else if(y == 8) { // very top bool playing = sequencer.player.isPlaying(); switch(x) { case 5: disable(); sequencer.playbackScreen.enable(); break; } } else { switch(y) { case 0: { // number of beats unsigned int bit = (1 << (configWidth - x - 1)); unsigned int beatsCount = sequencer.beats.size() ^ bit; std::cout << "set number of beats to " << beatsCount << std::endl; sequencer.beats.resize(beatsCount); } break; case 1: { // sequence expansion unsigned int factor = x + 2; sequencer.beats.expand(factor); sequencer.player.setBpm(sequencer.player.getBpm() * factor); } break; case 2: { // sequence reduction erasing conflicts unsigned int factor = x + 2; sequencer.beats.reduceErasingConflicts(factor); sequencer.player.setBpm( std::max(sequencer.player.getBpm() / factor, (Player::Bpm)1 )); } break; } sequencer.beats.print(std::cout); } refreshAll(); } void ConfigurationScreen::keyReleased(unsigned char x, unsigned char y) { refreshAll(); } void ConfigurationScreen::refresh(unsigned char x, unsigned char y) { if(x == 8) { // very right } else if(y == 8) { // very top switch(x) { case 5: setColor(x, y, colors::activeOption); break; } } else { switch(y) { case 0: { // number of beats unsigned int beatsCount = sequencer.beats.size(); if(beatsCount & (1 << (configWidth - x - 1))) { setColor(x, y, colors::activeBeatsCount); } else { setColor(x, y, colors::inactiveBeatsCount); } } break; case 1: // sequence expansion setColor(x, y, colors::sequenceExpansionButton); break; case 2: // reduce erasing conflicts setColor(x, y, colors::sequenceReductionErasingConflictsButton); break; } } }