annotate presetManager.mm @ 15:e439bf85b665

PDSynthWrapper reorganisation
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Tue, 21 Oct 2014 16:52:56 +0100
parents f83635861187
children 2a7320a8cbed
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@13 15 template <typename T>
rt300@13 16 vector<T> makeVector8(T a1, T a2,T a3,T a4,T a5,T a6, T a7, T a8){
rt300@13 17
rt300@13 18 vector<T> vec;
rt300@13 19 vec.push_back(a1);
rt300@13 20 vec.push_back(a2);
rt300@13 21 vec.push_back(a3);
rt300@13 22 vec.push_back(a4);
rt300@13 23 vec.push_back(a5);
rt300@13 24 vec.push_back(a6);
rt300@13 25 vec.push_back(a7);
rt300@13 26 vec.push_back(a8);
rt300@13 27 return vec;
rt300@13 28 }
rt300@12 29
rt300@1 30 //---------------------------------------------------------------------------
rt300@1 31 Json::Value Preset::presetToJson(){
rt300@1 32 // create the string for this instance of Preset object
rt300@1 33
rt300@1 34 Json::Value presetVal;
rt300@1 35
rt300@5 36 presetVal["creatorUserName"] = creatorUserName;
rt300@5 37 presetVal["creatorDeviceID"] = creatorDeviceID;
rt300@1 38 presetVal["creationTime"] = creationTime;
rt300@1 39 presetVal["name"] = name;
rt300@5 40 presetVal["imageFileName"] = imageFileName;
rt300@5 41
rt300@5 42 for(vector<int>::iterator i = CCValues.begin(); i < CCValues.end(); i++){
rt300@5 43 int c = *i;
rt300@5 44 presetVal["CCValues"].append(c);
rt300@1 45 }
rt300@1 46
rt300@1 47 return presetVal;
rt300@1 48 }
rt300@1 49 //---------------------------------------------------------------------------
rt300@1 50 PresetManager::PresetManager(){
rt300@1 51 timesOpened = 0;
rt300@1 52 nextID = 0;
rt300@1 53
rt300@1 54 string ts = ofGetTimestampString();
rt300@1 55
rt300@1 56 presetAlertShowing = false;
rt300@1 57
rt300@1 58
rt300@1 59 cout << "ofGetTimestampString: " << ts << '\n';
rt300@1 60 }
rt300@1 61 //---------------------------------------------------------------------------
rt300@1 62 Json::Value PresetManager::allPresetsToJson(){
rt300@1 63 Json::Value root;
rt300@1 64
rt300@1 65 // use jsoncpp
rt300@1 66 vector<Preset *>::iterator presetIter;
rt300@1 67
rt300@1 68 int i = 0;
rt300@1 69 for(presetIter = thePresets.begin(); presetIter < thePresets.end(); presetIter++){
rt300@1 70 root["presets"][i] = (*presetIter)->presetToJson();
rt300@1 71 i++;
rt300@1 72 }
rt300@1 73
rt300@1 74 return root;
rt300@1 75 }
rt300@1 76 //---------------------------------------------------------------------------
rt300@5 77 void PresetManager::loadPresetsFromJsonFile(const string &jsonFile){
rt300@1 78 Json::Value root;
rt300@1 79 Json::Reader reader;
rt300@1 80
rt300@1 81
rt300@1 82 ifstream theFile(jsonFile.c_str());
rt300@1 83 stringstream fileText;
rt300@1 84 string line;
rt300@1 85 if(!theFile){
rt300@1 86 cout<<"can't find preset file \n";
rt300@1 87 return;
rt300@1 88 }else{
rt300@1 89
rt300@1 90 while(theFile){
rt300@1 91 theFile >> line;
rt300@1 92 // cout << line << "\n"; // lots?
rt300@1 93 fileText << line;
rt300@1 94
rt300@1 95 }
rt300@1 96
rt300@1 97 theFile.close();
rt300@1 98 }
rt300@1 99
rt300@1 100 bool parsingSuccessful = reader.parse( fileText.str(), root );
rt300@1 101
rt300@1 102 if ( !parsingSuccessful )
rt300@1 103 {
rt300@1 104 // report to the user the failure and their locations in the document.
rt300@1 105 std::cout << "Failed to parse preset JSON: \n"
rt300@1 106 << reader.getFormattedErrorMessages();
rt300@1 107 return;
rt300@1 108 }
rt300@1 109
rt300@1 110 // now put into variables
rt300@1 111 const Json::Value jpresets = root["presets"];
rt300@1 112
rt300@1 113 for ( int index = 0; index < jpresets.size(); ++index ) thePresets.push_back(new Preset(jpresets[index]));
rt300@6 114
rt300@1 115
rt300@1 116 }
rt300@1 117 //---------------------------------------------------------------------------
rt300@1 118 void PresetManager::printAll(){
rt300@1 119 cout << "----------------ALL PRESETS-------------: \n";
rt300@1 120 cout << allPresetsToJson() << "\n";
rt300@1 121 }
rt300@1 122 //---------------------------------------------------------------------------
rt300@1 123 void PresetManager::showNameDialog(){
rt300@1 124 // if(!presetAlertViewController.alertShowing){ // this is to stop wierd infinite loop in ios5 (simulator)
rt300@1 125 // presetAlertShowing = true;
rt300@1 126 // [presetAlertViewController showPresetNamePrompt];
rt300@1 127 //
rt300@1 128 // }
rt300@1 129
rt300@1 130 }
rt300@1 131 //---------------------------------------------------------------------------
rt300@1 132 // when save button pressed
rt300@5 133 void PresetManager::savePreset(const string name, vector<int> values){
rt300@1 134
rt300@1 135 presetAlertShowing = false;
rt300@1 136 // check for same name
rt300@1 137 vector<Preset *>::iterator iter;
rt300@4 138
rt300@1 139 for(iter = thePresets.begin(); iter < thePresets.end(); iter++){
rt300@1 140 if ((*iter)->name == name){
rt300@4 141 cout << "WARNING Preset by that name exists, overwriting\n";
rt300@4 142 // overwrite it
rt300@6 143 (*iter)->setValues(values);
rt300@5 144 updatePresetFile();
rt300@5 145 eventLogger.logEvent(SAVE_PRESET); // TODO need to log details?
rt300@5 146 return;
rt300@1 147 }
rt300@1 148 }
rt300@1 149
rt300@1 150 if(name == ""){
rt300@1 151 cout << "Please name preset\n";
rt300@1 152
rt300@1 153 }
rt300@1 154
rt300@4 155 thePresets.push_back(new Preset(values, name, nextID, eventLogger.userName, eventLogger.deviceID));
rt300@1 156 eventLogger.logEvent(SAVE_PRESET); // TODO need to log details?
rt300@5 157 updatePresetFile();
rt300@1 158
rt300@1 159 }
rt300@6 160 //-----------------------------------------------------------------------------
rt300@6 161 void PresetManager::generatePresetSlot(const string name, const string imagefn){
rt300@14 162 vector<int> values = makeVector8(int(rand() % 128),int(rand() % 128),int(rand() % 128),int(rand() % 128),int(rand() % 128),0,0,0); // empty
rt300@6 163 thePresets.push_back(new Preset(values, name, nextID, eventLogger.userName, eventLogger.deviceID, imagefn));
rt300@6 164
rt300@6 165 }
rt300@5 166 //----------------------------------------------cu-----------------------------
rt300@4 167 vector<int> PresetManager::recallPreset(string name){
rt300@4 168 vector<Preset *>::iterator p;
rt300@5 169 for(p = thePresets.begin(); p < thePresets.end(); p++){
rt300@5 170 if ( (*p)->getName() == name){
rt300@5 171 return (*p)->getValues();
rt300@5 172 }
rt300@4 173 }
rt300@5 174 vector<int> empty;
rt300@5 175 return empty;
rt300@4 176 }
rt300@1 177 //----------------------------------------------cu-----------------------------
rt300@1 178 void PresetManager::startLoadAll(){
rt300@1 179
rt300@5 180 presetFileName = ofxiPhoneGetDocumentsDirectory() + PRESET_FILENAME;
rt300@1 181
rt300@5 182 loadPresetsFromJsonFile(presetFileName);
rt300@1 183
rt300@1 184 timesOpened++;
rt300@1 185 }
rt300@5 186 //---------------------------------------------------------------------------
rt300@5 187 void PresetManager::updatePresetFile(){
rt300@5 188
rt300@5 189 // TODO really inefficient
rt300@5 190
rt300@5 191 ofFile presetFile(presetFileName,ofFile::WriteOnly);
rt300@1 192
rt300@1 193 // stick all the stuff in a json value
rt300@1 194 Json::Value root = allPresetsToJson();
rt300@6 195
rt300@1 196 presetFile << root;
rt300@5 197 }
rt300@5 198 //---------------------------------------------------------------------------
rt300@5 199 void PresetManager::exitAndSaveAll(){
rt300@5 200 updatePresetFile();
rt300@1 201
rt300@1 202 }
rt300@1 203
rt300@1 204 //---------------------------------------------------------------------------
rt300@1 205 void PresetManager::clearAll(){
rt300@1 206 thePresets.clear();
rt300@1 207 }
rt300@1 208 //---------------------------------------------------------------------------
rt300@1 209 //---------------------------------------------------------------------------
rt300@1 210 //---------------------------------------------------------------------------
rt300@1 211 //---------------------------------------------------------------------------
rt300@1 212 //---------------------------------------------------------------------------