annotate presetManager.mm @ 52:89944ab3e129 tip

fix oF linker errors ios8
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Tue, 03 Feb 2015 13:18:23 +0000
parents 93317878abef
children
rev   line source
rt300@1 1 //
rt300@1 2 // presetManager.mm
rt300@1 3 // oscSenderExample
rt300@1 4 //
rt300@1 5 // Created by Robert Tubb on 07/11/2012.
rt300@1 6 //
rt300@1 7 //
rt300@1 8
rt300@1 9 #include "presetManager.h"
rt300@1 10
rt300@1 11 //---------------------------------------------------------------------------
rt300@1 12
rt300@1 13 extern EventLogger eventLogger;
rt300@1 14
rt300@18 15
rt300@12 16
rt300@1 17 //---------------------------------------------------------------------------
rt300@1 18 Json::Value Preset::presetToJson(){
rt300@1 19 // create the string for this instance of Preset object
rt300@1 20
rt300@1 21 Json::Value presetVal;
rt300@1 22
rt300@5 23 presetVal["creatorUserName"] = creatorUserName;
rt300@5 24 presetVal["creatorDeviceID"] = creatorDeviceID;
rt300@1 25 presetVal["creationTime"] = creationTime;
rt300@1 26 presetVal["name"] = name;
rt300@5 27 presetVal["imageFileName"] = imageFileName;
rt300@5 28
rt300@5 29 for(vector<int>::iterator i = CCValues.begin(); i < CCValues.end(); i++){
rt300@5 30 int c = *i;
rt300@5 31 presetVal["CCValues"].append(c);
rt300@1 32 }
rt300@1 33
rt300@1 34 return presetVal;
rt300@1 35 }
rt300@1 36 //---------------------------------------------------------------------------
rt300@1 37 PresetManager::PresetManager(){
rt300@1 38 timesOpened = 0;
rt300@1 39 nextID = 0;
rt300@1 40
rt300@1 41 string ts = ofGetTimestampString();
rt300@1 42
rt300@1 43 presetAlertShowing = false;
rt300@1 44
rt300@31 45
rt300@1 46
rt300@1 47 cout << "ofGetTimestampString: " << ts << '\n';
rt300@1 48 }
rt300@31 49 void PresetManager::makeNeutralPreset(){
rt300@27 50 vector<int> middleVals;
rt300@27 51 for(int i = 0; i < TOTAL_NUM_PARAMS ; i++){
rt300@27 52 middleVals.push_back(64);
rt300@27 53 }
rt300@31 54
rt300@27 55 neutralPreset = Preset(middleVals,
rt300@31 56 "Neutral",
rt300@31 57 999,
rt300@31 58 "whocares",
rt300@31 59 999,
rt300@31 60 "buttron.png");
rt300@31 61
rt300@31 62 }
rt300@31 63 //-------------------------------------------------------------------------
rt300@31 64 Preset* PresetManager::getNeutralPreset(){
rt300@31 65
rt300@31 66
rt300@27 67
rt300@27 68 return &neutralPreset;
rt300@27 69 }
rt300@1 70 //---------------------------------------------------------------------------
rt300@1 71 Json::Value PresetManager::allPresetsToJson(){
rt300@1 72 Json::Value root;
rt300@1 73
rt300@1 74 // use jsoncpp
rt300@1 75 vector<Preset *>::iterator presetIter;
rt300@1 76
rt300@1 77 int i = 0;
rt300@1 78 for(presetIter = thePresets.begin(); presetIter < thePresets.end(); presetIter++){
rt300@1 79 root["presets"][i] = (*presetIter)->presetToJson();
rt300@1 80 i++;
rt300@1 81 }
rt300@1 82
rt300@1 83 return root;
rt300@1 84 }
rt300@1 85 //---------------------------------------------------------------------------
rt300@5 86 void PresetManager::loadPresetsFromJsonFile(const string &jsonFile){
rt300@1 87 Json::Value root;
rt300@1 88 Json::Reader reader;
rt300@1 89
rt300@1 90
rt300@1 91 ifstream theFile(jsonFile.c_str());
rt300@1 92 stringstream fileText;
rt300@1 93 string line;
rt300@1 94 if(!theFile){
rt300@1 95 cout<<"can't find preset file \n";
rt300@1 96 return;
rt300@1 97 }else{
rt300@1 98
rt300@1 99 while(theFile){
rt300@1 100 theFile >> line;
rt300@1 101 // cout << line << "\n"; // lots?
rt300@1 102 fileText << line;
rt300@1 103
rt300@1 104 }
rt300@1 105
rt300@1 106 theFile.close();
rt300@1 107 }
rt300@1 108
rt300@1 109 bool parsingSuccessful = reader.parse( fileText.str(), root );
rt300@1 110
rt300@1 111 if ( !parsingSuccessful )
rt300@1 112 {
rt300@1 113 // report to the user the failure and their locations in the document.
rt300@1 114 std::cout << "Failed to parse preset JSON: \n"
rt300@1 115 << reader.getFormattedErrorMessages();
rt300@1 116 return;
rt300@1 117 }
rt300@1 118
rt300@1 119 // now put into variables
rt300@1 120 const Json::Value jpresets = root["presets"];
rt300@1 121
rt300@18 122 for ( int index = 0; index < jpresets.size(); ++index ){
rt300@18 123
rt300@18 124 // check that it is our user ID
rt300@18 125 if (jpresets[index]["creatorUserName"].asString() == eventLogger.userName){
rt300@18 126 thePresets.push_back(new Preset(jpresets[index]));
rt300@18 127 }
rt300@18 128
rt300@18 129 }
rt300@6 130
rt300@1 131
rt300@1 132 }
rt300@1 133 //---------------------------------------------------------------------------
rt300@1 134 void PresetManager::printAll(){
rt300@1 135 cout << "----------------ALL PRESETS-------------: \n";
rt300@1 136 cout << allPresetsToJson() << "\n";
rt300@1 137 }
rt300@1 138 //---------------------------------------------------------------------------
rt300@1 139 void PresetManager::showNameDialog(){
rt300@1 140 // if(!presetAlertViewController.alertShowing){ // this is to stop wierd infinite loop in ios5 (simulator)
rt300@1 141 // presetAlertShowing = true;
rt300@1 142 // [presetAlertViewController showPresetNamePrompt];
rt300@1 143 //
rt300@1 144 // }
rt300@1 145
rt300@1 146 }
rt300@19 147 //---------------------------------------------------------------------------
rt300@19 148 void PresetManager::showOverwriteDialog(){
rt300@19 149 // if(!presetAlertViewController.alertShowing){ // this is to stop wierd infinite loop in ios5 (simulator)
rt300@19 150 // presetAlertShowing = true;
rt300@19 151 // [presetAlertViewController showPresetNamePrompt];
rt300@19 152 //
rt300@19 153 // }
rt300@19 154
rt300@19 155 }
rt300@18 156 //------------------------------------------------
rt300@18 157 // when preset slot becomes a real preset to save
rt300@18 158 void PresetManager::savePreset(Preset * aPreset){
rt300@18 159
rt300@18 160 vector<Preset *>::iterator iter;
rt300@33 161 vector<int> logdetails;
rt300@18 162 for(iter = thePresets.begin(); iter < thePresets.end(); iter++){
rt300@18 163 if ((*iter)->name == aPreset->name){
rt300@18 164 cout << "WARNING Preset by that name exists, overwriting\n";
rt300@19 165 // TODO throw up a dialog?
rt300@19 166 showOverwriteDialog();
rt300@19 167
rt300@18 168 (*iter)->overwriteValues(aPreset->CCValues);
rt300@18 169 updatePresetFile();
rt300@33 170 logdetails =aPreset->CCValues;
rt300@33 171 logdetails.push_back(nextID);
rt300@33 172 eventLogger.logEvent(SAVE_PRESET, logdetails); // TODO need to log index or name!?
rt300@18 173 return;
rt300@18 174 }
rt300@18 175 }
rt300@18 176
rt300@18 177 if(aPreset->name == ""){
rt300@18 178 cout << "Please name preset\n";
rt300@18 179
rt300@18 180 }
rt300@18 181
rt300@33 182 thePresets.push_back(new Preset(aPreset->CCValues, aPreset->name, nextID++, eventLogger.userName, eventLogger.deviceID, aPreset->imageFileName));
rt300@33 183
rt300@33 184 logdetails = aPreset->CCValues;
rt300@33 185 logdetails.push_back(nextID);
rt300@33 186 eventLogger.logEvent(SAVE_PRESET, logdetails); // TODO need to log details?
rt300@18 187 updatePresetFile();
rt300@18 188 }
rt300@1 189 //---------------------------------------------------------------------------
rt300@1 190 // when save button pressed
rt300@5 191 void PresetManager::savePreset(const string name, vector<int> values){
rt300@1 192
rt300@1 193 presetAlertShowing = false;
rt300@1 194 // check for same name
rt300@1 195 vector<Preset *>::iterator iter;
rt300@33 196 vector<int> logdetails;
rt300@33 197
rt300@1 198 for(iter = thePresets.begin(); iter < thePresets.end(); iter++){
rt300@1 199 if ((*iter)->name == name){
rt300@4 200 cout << "WARNING Preset by that name exists, overwriting\n";
rt300@4 201 // overwrite it
rt300@18 202 (*iter)->overwriteValues(values);
rt300@5 203 updatePresetFile();
rt300@33 204 logdetails =values;
rt300@33 205 logdetails.push_back(nextID);
rt300@33 206 eventLogger.logEvent(SAVE_PRESET,logdetails); // TODO need to log details?
rt300@5 207 return;
rt300@1 208 }
rt300@1 209 }
rt300@1 210
rt300@1 211 if(name == ""){
rt300@1 212 cout << "Please name preset\n";
rt300@1 213
rt300@1 214 }
rt300@1 215
rt300@33 216 thePresets.push_back(new Preset(values, name, nextID++, eventLogger.userName, eventLogger.deviceID));
rt300@33 217
rt300@33 218 logdetails =values;
rt300@33 219 logdetails.push_back(nextID);
rt300@33 220 eventLogger.logEvent(SAVE_PRESET, logdetails); // TODO need to log details?
rt300@5 221 updatePresetFile();
rt300@1 222
rt300@1 223 }
rt300@18 224
rt300@5 225 //----------------------------------------------cu-----------------------------
rt300@18 226 vector<int> PresetManager::getPresetValuesForName(string name){
rt300@4 227 vector<Preset *>::iterator p;
rt300@5 228 for(p = thePresets.begin(); p < thePresets.end(); p++){
rt300@5 229 if ( (*p)->getName() == name){
rt300@5 230 return (*p)->getValues();
rt300@5 231 }
rt300@4 232 }
rt300@5 233 vector<int> empty;
rt300@5 234 return empty;
rt300@4 235 }
rt300@18 236 //---------------------------------------------------------------------------
rt300@18 237 Preset* PresetManager::getPresetAtIndex(int index){
rt300@31 238 // if (index == -1){
rt300@31 239 // cout << " RETURNING NEUTRAL PRESET " << endl;
rt300@31 240 // }
rt300@18 241 if (index >= thePresets.size()){
rt300@18 242 cout << "ERROR: index " << index << " exceeds number of presets " << thePresets.size() << endl;
rt300@27 243 cout << " YOU HAVENT DONE EXP STAGE??" << endl;
rt300@18 244 return NULL;
rt300@18 245 }else{
rt300@18 246 return thePresets[index];
rt300@18 247
rt300@18 248 }
rt300@18 249 };
rt300@18 250 //---------------------------------------------------------------------------
rt300@1 251 void PresetManager::startLoadAll(){
rt300@1 252
rt300@19 253 presetFileName = ofxiPhoneGetDocumentsDirectory() + eventLogger.userName + '_' + PRESET_FILENAME;
rt300@1 254
rt300@5 255 loadPresetsFromJsonFile(presetFileName);
rt300@1 256
rt300@1 257 timesOpened++;
rt300@1 258 }
rt300@5 259 //---------------------------------------------------------------------------
rt300@5 260 void PresetManager::updatePresetFile(){
rt300@5 261
rt300@5 262 // TODO really inefficient
rt300@5 263
rt300@5 264 ofFile presetFile(presetFileName,ofFile::WriteOnly);
rt300@1 265
rt300@1 266 // stick all the stuff in a json value
rt300@1 267 Json::Value root = allPresetsToJson();
rt300@6 268
rt300@1 269 presetFile << root;
rt300@5 270 }
rt300@5 271 //---------------------------------------------------------------------------
rt300@5 272 void PresetManager::exitAndSaveAll(){
rt300@5 273 updatePresetFile();
rt300@1 274
rt300@1 275 }
rt300@1 276
rt300@1 277 //---------------------------------------------------------------------------
rt300@1 278 void PresetManager::clearAll(){
rt300@1 279 thePresets.clear();
rt300@1 280 }
rt300@1 281 //---------------------------------------------------------------------------
rt300@1 282 //---------------------------------------------------------------------------
rt300@1 283 //---------------------------------------------------------------------------
rt300@1 284 //---------------------------------------------------------------------------
rt300@1 285 //---------------------------------------------------------------------------