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@13: template rt300@13: vector makeVector8(T a1, T a2,T a3,T a4,T a5,T a6, T a7, T a8){ rt300@13: rt300@13: vector vec; rt300@13: vec.push_back(a1); rt300@13: vec.push_back(a2); rt300@13: vec.push_back(a3); rt300@13: vec.push_back(a4); rt300@13: vec.push_back(a5); rt300@13: vec.push_back(a6); rt300@13: vec.push_back(a7); rt300@13: vec.push_back(a8); rt300@13: return vec; rt300@13: } 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@1: rt300@1: cout << "ofGetTimestampString: " << ts << '\n'; rt300@1: } 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@1: for ( int index = 0; index < jpresets.size(); ++index ) thePresets.push_back(new Preset(jpresets[index])); 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@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@4: 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@6: (*iter)->setValues(values); rt300@5: updatePresetFile(); rt300@5: eventLogger.logEvent(SAVE_PRESET); // 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@4: thePresets.push_back(new Preset(values, name, nextID, eventLogger.userName, eventLogger.deviceID)); rt300@1: eventLogger.logEvent(SAVE_PRESET); // TODO need to log details? rt300@5: updatePresetFile(); rt300@1: rt300@1: } rt300@6: //----------------------------------------------------------------------------- rt300@6: void PresetManager::generatePresetSlot(const string name, const string imagefn){ rt300@14: vector values = makeVector8(int(rand() % 128),int(rand() % 128),int(rand() % 128),int(rand() % 128),int(rand() % 128),0,0,0); // empty rt300@6: thePresets.push_back(new Preset(values, name, nextID, eventLogger.userName, eventLogger.deviceID, imagefn)); rt300@6: rt300@6: } rt300@5: //----------------------------------------------cu----------------------------- rt300@4: vector PresetManager::recallPreset(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@1: //----------------------------------------------cu----------------------------- rt300@1: void PresetManager::startLoadAll(){ rt300@1: rt300@5: presetFileName = ofxiPhoneGetDocumentsDirectory() + 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: //---------------------------------------------------------------------------