rt300@0: // rt300@0: // presetManager.mm rt300@0: // oscSenderExample rt300@0: // rt300@0: // Created by Robert Tubb on 07/11/2012. rt300@0: // rt300@0: // rt300@0: rt300@0: #include "presetManager.h" rt300@0: rt300@35: rt300@35: rt300@0: //--------------------------------------------------------------------------- rt300@3: extern Grid theGridView; rt300@0: PresetManager presetManager; rt300@8: extern EventLogger eventLogger; rt300@16: extern PresetAlertViewController *presetAlertViewController; rt300@8: //--------------------------------------------------------------------------- rt300@8: vector Preset::makePresetPicture(TwoVector coord){ rt300@8: // convert midi parameters to a nice piccy rt300@8: vector params = theGridView.calculateParamsFromCoord(coord); rt300@8: vector pixCols; rt300@8: rt300@8: ofColor col(255,0,0); rt300@43: for(int i=0; i::iterator presetIter; rt300@8: rt300@8: int i = 0; rt300@8: for(presetIter = thePresets.begin(); presetIter < thePresets.end(); presetIter++){ rt300@38: // only save the preset to file if it was ours... (other users and defaults saved elewhere) rt300@44: if((*presetIter).creatorDeviceID == eventLogger.deviceID){ rt300@44: root["presets"][i] = (*presetIter).presetToJson(); rt300@38: i++; rt300@38: } rt300@8: } rt300@27: rt300@8: return root; rt300@8: } rt300@8: //--------------------------------------------------------------------------- rt300@8: void PresetManager::readJsonToPresets(const string &jsonFile){ rt300@8: Json::Value root; rt300@8: Json::Reader reader; rt300@8: rt300@8: rt300@8: ifstream theFile(jsonFile.c_str()); rt300@8: stringstream fileText; rt300@8: string line; rt300@8: if(!theFile){ rt300@35: cout<<"can't find preset file: " << jsonFile.c_str() << "\n"; rt300@22: return; rt300@8: }else{ rt300@8: rt300@8: while(theFile){ rt300@8: theFile >> line; rt300@9: // cout << line << "\n"; // lots? rt300@8: fileText << line; rt300@8: rt300@8: } rt300@8: rt300@8: theFile.close(); rt300@8: } rt300@8: rt300@8: bool parsingSuccessful = reader.parse( fileText.str(), root ); rt300@8: rt300@8: if ( !parsingSuccessful ) rt300@8: { rt300@8: // report to the user the failure and their locations in the document. rt300@22: std::cout << "Failed to parse preset JSON: \n" rt300@8: << reader.getFormattedErrorMessages(); rt300@8: return; rt300@8: } rt300@8: rt300@8: // now put into variables rt300@8: const Json::Value jpresets = root["presets"]; rt300@8: rt300@44: for ( int index = 0; index < jpresets.size(); ++index ) thePresets.push_back(Preset(jpresets[index])); rt300@8: rt300@8: //printAll(); rt300@8: rt300@8: } rt300@4: //--------------------------------------------------------------------------- rt300@4: void PresetManager::printAll(){ rt300@30: cout << "----------------ALL PRESETS-------------: \n"; rt300@30: cout << allPresetsToJson() << "\n"; rt300@0: } rt300@25: //--------------------------------------------------------------------------- rt300@9: void PresetManager::showNameDialog(){ rt300@29: if(!presetAlertViewController.alertShowing){ // this is to stop wierd infinite loop in ios5 (simulator) rt300@22: presetAlertShowing = true; rt300@22: [presetAlertViewController showPresetNamePrompt]; rt300@22: rt300@22: } rt300@22: rt300@9: } rt300@0: //--------------------------------------------------------------------------- rt300@8: // when save button pressed rt300@8: int PresetManager::addPreset(const string name){ rt300@3: rt300@22: presetAlertShowing = false; rt300@0: // check for same name rt300@0: vector::iterator iter; rt300@31: /* rt300@0: for(iter = thePresets.begin(); iter < thePresets.end(); iter++){ rt300@0: if ((*iter)->name == name){ rt300@0: cout << " Preset by that name exists\n"; rt300@0: rt300@0: // use exceptions! rt300@0: return -1; rt300@0: } rt300@0: } rt300@31: rt300@0: if(name == ""){ rt300@0: cout << "Please name preset\n"; rt300@0: return -2; rt300@0: rt300@0: } rt300@31: */ rt300@31: // hmm shouldn't have to know about eventlogger and grid view... rt300@37: rt300@38: // get the preset coord from the grid rt300@39: TwoVector coord = theGridView.getCoordForPresetSave(); rt300@38: rt300@38: rt300@46: thePresets.push_back(Preset(coord, name,nextID, eventLogger.userName, eventLogger.deviceID, ((testApp*)ofGetAppPtr())->currentSequence)); rt300@38: eventLogger.logEvent(SAVE_PRESET, coord); rt300@9: // poke grid view to get it to show details rt300@9: theGridView.snapCheck(); rt300@0: // if ok rt300@0: return nextID++; rt300@0: } rt300@8: rt300@5: //--------------------------------------------------------------------------- rt300@5: vector PresetManager::getPresetsInRange(const TwoVector min, const TwoVector max){ rt300@0: //return all the coordinates. oh and names (displayed at certain scales?). rt300@3: rt300@3: // TODO INEFFICIENT FOR LOTS OF PRESETS. CALLED EVERY GRAPHICS UPDATE! rt300@3: // so: put burden on saving rather than retrieving, make into list and index using coordinates rt300@3: rt300@5: vector results; rt300@44: vector::iterator presetIter; rt300@3: for(presetIter = thePresets.begin(); presetIter < thePresets.end(); presetIter++){ rt300@44: if( ((*presetIter).coordinates.x > min.x ) && ((*presetIter).coordinates.y > min.y ) && ((*presetIter).coordinates.x < max.x ) && ((*presetIter).coordinates.y < max.y )){ rt300@44: results.push_back(&(*presetIter)); rt300@3: } rt300@3: rt300@3: } rt300@3: return results; rt300@0: rt300@0: } rt300@5: rt300@5: rt300@5: //--------------------------------------------------------------------------- rt300@5: void PresetManager::drawPresetsInRange(const TwoVector min, const TwoVector max){ rt300@5: vector pInRange = getPresetsInRange(min, max); rt300@5: vector::iterator piter; rt300@5: int i = 0; rt300@5: for(piter = pInRange.begin(); piter < pInRange.end(); piter++){ rt300@5: rt300@5: (*piter)->draw(); rt300@5: i++; rt300@5: } rt300@5: rt300@5: } rt300@8: //----------------------------------------------cu----------------------------- rt300@30: void PresetManager::startLoadAll(){ rt300@8: // get stuff from file rt300@3: // load file rt300@3: rt300@8: string fname = ofxiPhoneGetDocumentsDirectory() + PRESET_FILENAME; rt300@35: readJsonToPresets(fname); rt300@5: rt300@46: string fullpath = ofFilePath::getAbsolutePath(ofToDataPath(FACTORY_PRESET_FILENAME)); rt300@35: string file = ofFilePath::getFileName(fullpath); rt300@35: string folder = ofFilePath::getEnclosingDirectory(fullpath); rt300@35: rt300@35: readJsonToPresets(fullpath); rt300@7: rt300@3: timesOpened++; rt300@3: } rt300@8: rt300@3: //--------------------------------------------------------------------------- rt300@3: void PresetManager::exitAndSaveAll(){ rt300@8: ofFile presetFile(ofxiPhoneGetDocumentsDirectory() +PRESET_FILENAME,ofFile::WriteOnly); rt300@4: rt300@8: // stick all the stuff in a json value rt300@8: Json::Value root = allPresetsToJson(); rt300@5: rt300@8: cout << root; rt300@8: presetFile << root; rt300@29: rt300@3: } rt300@32: //--------------------------------------------------------------------------- rt300@32: void PresetManager::saveSessionToFile(string userName){ // for supervised newUser() rt300@32: ofFile presetFile(ofxiPhoneGetDocumentsDirectory() + userName + '_' + PRESET_FILENAME,ofFile::WriteOnly); rt300@32: rt300@32: // stick all the stuff in a json value rt300@32: Json::Value root = allPresetsToJson(); rt300@32: rt300@32: cout << root; rt300@32: presetFile << root; rt300@32: rt300@32: } rt300@35: rt300@5: //--------------------------------------------------------------------------- rt300@5: void PresetManager::clearAll(){ rt300@5: thePresets.clear(); rt300@5: } rt300@3: //--------------------------------------------------------------------------- rt300@0: //--------------------------------------------------------------------------- rt300@0: //--------------------------------------------------------------------------- rt300@0: //--------------------------------------------------------------------------- rt300@0: //---------------------------------------------------------------------------