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 //--------------------------------------------------------------------------- |