rt300@1: // rt300@1: // presetManager.mm rt300@1: // oscSenderExample rt300@1: // rt300@1: // Created by Robert Tubb on 07/11/2012. rt300@1: // rt300@1: // rt300@1: rt300@1: #include "presetManager.h" rt300@1: rt300@1: //--------------------------------------------------------------------------- rt300@1: rt300@1: extern EventLogger eventLogger; rt300@1: rt300@18: rt300@12: rt300@1: //--------------------------------------------------------------------------- rt300@1: Json::Value Preset::presetToJson(){ rt300@1: // create the string for this instance of Preset object rt300@1: rt300@1: Json::Value presetVal; rt300@1: rt300@5: presetVal["creatorUserName"] = creatorUserName; rt300@5: presetVal["creatorDeviceID"] = creatorDeviceID; rt300@1: presetVal["creationTime"] = creationTime; rt300@1: presetVal["name"] = name; rt300@5: presetVal["imageFileName"] = imageFileName; rt300@5: rt300@5: for(vector::iterator i = CCValues.begin(); i < CCValues.end(); i++){ rt300@5: int c = *i; rt300@5: presetVal["CCValues"].append(c); rt300@1: } rt300@1: rt300@1: return presetVal; rt300@1: } rt300@1: //--------------------------------------------------------------------------- rt300@1: PresetManager::PresetManager(){ rt300@1: timesOpened = 0; rt300@1: nextID = 0; rt300@1: rt300@1: string ts = ofGetTimestampString(); rt300@1: rt300@1: presetAlertShowing = false; rt300@1: rt300@31: rt300@1: rt300@1: cout << "ofGetTimestampString: " << ts << '\n'; rt300@1: } rt300@31: void PresetManager::makeNeutralPreset(){ rt300@27: vector middleVals; rt300@27: for(int i = 0; i < TOTAL_NUM_PARAMS ; i++){ rt300@27: middleVals.push_back(64); rt300@27: } rt300@31: rt300@27: neutralPreset = Preset(middleVals, rt300@31: "Neutral", rt300@31: 999, rt300@31: "whocares", rt300@31: 999, rt300@31: "buttron.png"); rt300@31: rt300@31: } rt300@31: //------------------------------------------------------------------------- rt300@31: Preset* PresetManager::getNeutralPreset(){ rt300@31: rt300@31: rt300@27: rt300@27: return &neutralPreset; rt300@27: } rt300@1: //--------------------------------------------------------------------------- rt300@1: Json::Value PresetManager::allPresetsToJson(){ rt300@1: Json::Value root; rt300@1: rt300@1: // use jsoncpp rt300@1: vector::iterator presetIter; rt300@1: rt300@1: int i = 0; rt300@1: for(presetIter = thePresets.begin(); presetIter < thePresets.end(); presetIter++){ rt300@1: root["presets"][i] = (*presetIter)->presetToJson(); rt300@1: i++; rt300@1: } rt300@1: rt300@1: return root; rt300@1: } rt300@1: //--------------------------------------------------------------------------- rt300@5: void PresetManager::loadPresetsFromJsonFile(const string &jsonFile){ rt300@1: Json::Value root; rt300@1: Json::Reader reader; rt300@1: rt300@1: rt300@1: ifstream theFile(jsonFile.c_str()); rt300@1: stringstream fileText; rt300@1: string line; rt300@1: if(!theFile){ rt300@1: cout<<"can't find preset file \n"; rt300@1: return; rt300@1: }else{ rt300@1: rt300@1: while(theFile){ rt300@1: theFile >> line; rt300@1: // cout << line << "\n"; // lots? rt300@1: fileText << line; rt300@1: rt300@1: } rt300@1: rt300@1: theFile.close(); rt300@1: } rt300@1: rt300@1: bool parsingSuccessful = reader.parse( fileText.str(), root ); rt300@1: rt300@1: if ( !parsingSuccessful ) rt300@1: { rt300@1: // report to the user the failure and their locations in the document. rt300@1: std::cout << "Failed to parse preset JSON: \n" rt300@1: << reader.getFormattedErrorMessages(); rt300@1: return; rt300@1: } rt300@1: rt300@1: // now put into variables rt300@1: const Json::Value jpresets = root["presets"]; rt300@1: rt300@18: for ( int index = 0; index < jpresets.size(); ++index ){ rt300@18: rt300@18: // check that it is our user ID rt300@18: if (jpresets[index]["creatorUserName"].asString() == eventLogger.userName){ rt300@18: thePresets.push_back(new Preset(jpresets[index])); rt300@18: } rt300@18: rt300@18: } rt300@6: rt300@1: rt300@1: } rt300@1: //--------------------------------------------------------------------------- rt300@1: void PresetManager::printAll(){ rt300@1: cout << "----------------ALL PRESETS-------------: \n"; rt300@1: cout << allPresetsToJson() << "\n"; rt300@1: } rt300@1: //--------------------------------------------------------------------------- rt300@1: void PresetManager::showNameDialog(){ rt300@1: // if(!presetAlertViewController.alertShowing){ // this is to stop wierd infinite loop in ios5 (simulator) rt300@1: // presetAlertShowing = true; rt300@1: // [presetAlertViewController showPresetNamePrompt]; rt300@1: // rt300@1: // } rt300@1: rt300@1: } rt300@19: //--------------------------------------------------------------------------- rt300@19: void PresetManager::showOverwriteDialog(){ rt300@19: // if(!presetAlertViewController.alertShowing){ // this is to stop wierd infinite loop in ios5 (simulator) rt300@19: // presetAlertShowing = true; rt300@19: // [presetAlertViewController showPresetNamePrompt]; rt300@19: // rt300@19: // } rt300@19: rt300@19: } rt300@18: //------------------------------------------------ rt300@18: // when preset slot becomes a real preset to save rt300@18: void PresetManager::savePreset(Preset * aPreset){ rt300@18: rt300@18: vector::iterator iter; rt300@33: vector logdetails; rt300@18: for(iter = thePresets.begin(); iter < thePresets.end(); iter++){ rt300@18: if ((*iter)->name == aPreset->name){ rt300@18: cout << "WARNING Preset by that name exists, overwriting\n"; rt300@19: // TODO throw up a dialog? rt300@19: showOverwriteDialog(); rt300@19: rt300@18: (*iter)->overwriteValues(aPreset->CCValues); rt300@18: updatePresetFile(); rt300@33: logdetails =aPreset->CCValues; rt300@33: logdetails.push_back(nextID); rt300@33: eventLogger.logEvent(SAVE_PRESET, logdetails); // TODO need to log index or name!? rt300@18: return; rt300@18: } rt300@18: } rt300@18: rt300@18: if(aPreset->name == ""){ rt300@18: cout << "Please name preset\n"; rt300@18: rt300@18: } rt300@18: rt300@33: thePresets.push_back(new Preset(aPreset->CCValues, aPreset->name, nextID++, eventLogger.userName, eventLogger.deviceID, aPreset->imageFileName)); rt300@33: rt300@33: logdetails = aPreset->CCValues; rt300@33: logdetails.push_back(nextID); rt300@33: eventLogger.logEvent(SAVE_PRESET, logdetails); // TODO need to log details? rt300@18: updatePresetFile(); rt300@18: } rt300@1: //--------------------------------------------------------------------------- rt300@1: // when save button pressed rt300@5: void PresetManager::savePreset(const string name, vector values){ rt300@1: rt300@1: presetAlertShowing = false; rt300@1: // check for same name rt300@1: vector::iterator iter; rt300@33: vector logdetails; rt300@33: rt300@1: for(iter = thePresets.begin(); iter < thePresets.end(); iter++){ rt300@1: if ((*iter)->name == name){ rt300@4: cout << "WARNING Preset by that name exists, overwriting\n"; rt300@4: // overwrite it rt300@18: (*iter)->overwriteValues(values); rt300@5: updatePresetFile(); rt300@33: logdetails =values; rt300@33: logdetails.push_back(nextID); rt300@33: eventLogger.logEvent(SAVE_PRESET,logdetails); // TODO need to log details? rt300@5: return; rt300@1: } rt300@1: } rt300@1: rt300@1: if(name == ""){ rt300@1: cout << "Please name preset\n"; rt300@1: rt300@1: } rt300@1: rt300@33: thePresets.push_back(new Preset(values, name, nextID++, eventLogger.userName, eventLogger.deviceID)); rt300@33: rt300@33: logdetails =values; rt300@33: logdetails.push_back(nextID); rt300@33: eventLogger.logEvent(SAVE_PRESET, logdetails); // TODO need to log details? rt300@5: updatePresetFile(); rt300@1: rt300@1: } rt300@18: rt300@5: //----------------------------------------------cu----------------------------- rt300@18: vector PresetManager::getPresetValuesForName(string name){ rt300@4: vector::iterator p; rt300@5: for(p = thePresets.begin(); p < thePresets.end(); p++){ rt300@5: if ( (*p)->getName() == name){ rt300@5: return (*p)->getValues(); rt300@5: } rt300@4: } rt300@5: vector empty; rt300@5: return empty; rt300@4: } rt300@18: //--------------------------------------------------------------------------- rt300@18: Preset* PresetManager::getPresetAtIndex(int index){ rt300@31: // if (index == -1){ rt300@31: // cout << " RETURNING NEUTRAL PRESET " << endl; rt300@31: // } rt300@18: if (index >= thePresets.size()){ rt300@18: cout << "ERROR: index " << index << " exceeds number of presets " << thePresets.size() << endl; rt300@27: cout << " YOU HAVENT DONE EXP STAGE??" << endl; rt300@18: return NULL; rt300@18: }else{ rt300@18: return thePresets[index]; rt300@18: rt300@18: } rt300@18: }; rt300@18: //--------------------------------------------------------------------------- rt300@1: void PresetManager::startLoadAll(){ rt300@1: rt300@19: presetFileName = ofxiPhoneGetDocumentsDirectory() + eventLogger.userName + '_' + PRESET_FILENAME; rt300@1: rt300@5: loadPresetsFromJsonFile(presetFileName); rt300@1: rt300@1: timesOpened++; rt300@1: } rt300@5: //--------------------------------------------------------------------------- rt300@5: void PresetManager::updatePresetFile(){ rt300@5: rt300@5: // TODO really inefficient rt300@5: rt300@5: ofFile presetFile(presetFileName,ofFile::WriteOnly); rt300@1: rt300@1: // stick all the stuff in a json value rt300@1: Json::Value root = allPresetsToJson(); rt300@6: rt300@1: presetFile << root; rt300@5: } rt300@5: //--------------------------------------------------------------------------- rt300@5: void PresetManager::exitAndSaveAll(){ rt300@5: updatePresetFile(); rt300@1: rt300@1: } rt300@1: rt300@1: //--------------------------------------------------------------------------- rt300@1: void PresetManager::clearAll(){ rt300@1: thePresets.clear(); rt300@1: } rt300@1: //--------------------------------------------------------------------------- rt300@1: //--------------------------------------------------------------------------- rt300@1: //--------------------------------------------------------------------------- rt300@1: //--------------------------------------------------------------------------- rt300@1: //---------------------------------------------------------------------------