rt300@0
|
1 //
|
rt300@0
|
2 // presetManager.mm
|
rt300@0
|
3 // oscSenderExample
|
rt300@0
|
4 //
|
rt300@0
|
5 // Created by Robert Tubb on 07/11/2012.
|
rt300@0
|
6 //
|
rt300@0
|
7 //
|
rt300@0
|
8
|
rt300@0
|
9 #include "presetManager.h"
|
rt300@0
|
10
|
rt300@0
|
11 //---------------------------------------------------------------------------
|
rt300@3
|
12 extern Grid theGridView;
|
rt300@0
|
13 PresetManager presetManager;
|
rt300@8
|
14 extern EventLogger eventLogger;
|
rt300@8
|
15 extern IViewController *iViewController;
|
rt300@8
|
16 //---------------------------------------------------------------------------
|
rt300@8
|
17 vector<ofColor> Preset::makePresetPicture(TwoVector coord){
|
rt300@8
|
18 // convert midi parameters to a nice piccy
|
rt300@8
|
19 vector<int> params = theGridView.calculateParamsFromCoord(coord);
|
rt300@8
|
20 vector<ofColor> pixCols;
|
rt300@8
|
21
|
rt300@8
|
22 ofColor col(255,0,0);
|
rt300@8
|
23 for(int i=0; i<9;i++){
|
rt300@8
|
24 col.setHue(params[i]*2);
|
rt300@8
|
25 pixCols.push_back(col);
|
rt300@8
|
26 }
|
rt300@8
|
27 return pixCols;
|
rt300@8
|
28 }
|
rt300@0
|
29 //---------------------------------------------------------------------------
|
rt300@5
|
30 void Preset::draw(){
|
rt300@8
|
31 // TODO bit stupid actually. make it a shaded ball / dot
|
rt300@8
|
32
|
rt300@5
|
33 int sz = 2;
|
rt300@5
|
34 TwoVector pos = theGridView.coordToPixel(coordinates); // euch -rely on grid view?
|
rt300@5
|
35
|
rt300@5
|
36 if(pixVals.size() < 9){
|
rt300@5
|
37 cout << "NO PRESET PIC\n";
|
rt300@5
|
38 return;
|
rt300@5
|
39 }
|
rt300@5
|
40 //middle row
|
rt300@5
|
41 // centre
|
rt300@5
|
42 ofSetColor(pixVals[0]);
|
rt300@5
|
43 ofRect(pos.x, pos.y,sz,sz);
|
rt300@5
|
44 // right
|
rt300@5
|
45 ofSetColor(pixVals[1]);
|
rt300@5
|
46 ofRect(pos.x+sz, pos.y,sz,sz);
|
rt300@5
|
47 // left
|
rt300@5
|
48 ofSetColor(pixVals[2]);
|
rt300@5
|
49 ofRect(pos.x-sz, pos.y,sz,sz);
|
rt300@5
|
50
|
rt300@5
|
51 //top
|
rt300@5
|
52 // centre
|
rt300@5
|
53 ofSetColor(pixVals[3]);
|
rt300@5
|
54 ofRect(pos.x, pos.y+sz,sz,sz);
|
rt300@5
|
55 // right
|
rt300@5
|
56 ofSetColor(pixVals[4]);
|
rt300@5
|
57 ofRect(pos.x+sz, pos.y+sz,sz,sz);
|
rt300@5
|
58 // left
|
rt300@5
|
59 ofSetColor(pixVals[5]);
|
rt300@5
|
60 ofRect(pos.x-sz, pos.y+sz,sz,sz);
|
rt300@5
|
61
|
rt300@5
|
62 // bottom
|
rt300@5
|
63 // centre
|
rt300@5
|
64 ofSetColor(pixVals[6]);
|
rt300@5
|
65 ofRect(pos.x, pos.y-sz,sz,sz);
|
rt300@5
|
66 // right
|
rt300@5
|
67 ofSetColor(pixVals[7]);
|
rt300@5
|
68 ofRect(pos.x+sz, pos.y-sz,sz,sz);
|
rt300@5
|
69 // left
|
rt300@5
|
70 ofSetColor(pixVals[8]);
|
rt300@5
|
71 ofRect(pos.x-sz, pos.y-sz,sz,sz);
|
rt300@5
|
72 };
|
rt300@5
|
73 //---------------------------------------------------------------------------
|
rt300@8
|
74 Json::Value Preset::presetToJson(){
|
rt300@8
|
75 // create the string for this instance of Preset object
|
rt300@8
|
76
|
rt300@8
|
77 Json::Value presetVal;
|
rt300@8
|
78
|
rt300@8
|
79 presetVal["creatorUserName"] = creatorUserName;
|
rt300@8
|
80 presetVal["creatorDeviceID"] = creatorDeviceID;
|
rt300@8
|
81 presetVal["creationTime"] = creationTime;
|
rt300@8
|
82 presetVal["name"] = name;
|
rt300@8
|
83 presetVal["coordinates"]["x"] = coordinates.x;
|
rt300@8
|
84 presetVal["coordinates"]["y"] = coordinates.y;
|
rt300@8
|
85
|
rt300@8
|
86
|
rt300@8
|
87 return presetVal;
|
rt300@8
|
88 }
|
rt300@8
|
89 //---------------------------------------------------------------------------
|
rt300@0
|
90 PresetManager::PresetManager(){
|
rt300@3
|
91 timesOpened = 0;
|
rt300@4
|
92 nextID = 0;
|
rt300@8
|
93
|
rt300@7
|
94 string ts = ofGetTimestampString();
|
rt300@7
|
95 cout << "ofGetTimestampString: " << ts << '\n';
|
rt300@4
|
96 }
|
rt300@8
|
97 //---------------------------------------------------------------------------
|
rt300@8
|
98 Json::Value PresetManager::allPresetsToJson(){
|
rt300@8
|
99 Json::Value root;
|
rt300@8
|
100
|
rt300@8
|
101 // use jsoncpp
|
rt300@8
|
102 vector<Preset *>::iterator presetIter;
|
rt300@5
|
103
|
rt300@8
|
104 root["something"] = 23;
|
rt300@8
|
105
|
rt300@8
|
106 int i = 0;
|
rt300@8
|
107 for(presetIter = thePresets.begin(); presetIter < thePresets.end(); presetIter++){
|
rt300@8
|
108 root["presets"][i] = (*presetIter)->presetToJson();
|
rt300@8
|
109 i++;
|
rt300@8
|
110 }
|
rt300@8
|
111
|
rt300@8
|
112 return root;
|
rt300@8
|
113 }
|
rt300@8
|
114 //---------------------------------------------------------------------------
|
rt300@8
|
115 void PresetManager::readJsonToPresets(const string &jsonFile){
|
rt300@8
|
116 Json::Value root;
|
rt300@8
|
117 Json::Reader reader;
|
rt300@8
|
118
|
rt300@8
|
119
|
rt300@8
|
120 ifstream theFile(jsonFile.c_str());
|
rt300@8
|
121 stringstream fileText;
|
rt300@8
|
122 string line;
|
rt300@8
|
123 if(!theFile){
|
rt300@8
|
124 cout<<"can't find preset file \n";
|
rt300@8
|
125
|
rt300@8
|
126 }else{
|
rt300@8
|
127
|
rt300@8
|
128 while(theFile){
|
rt300@8
|
129 theFile >> line;
|
rt300@8
|
130 cout << line;
|
rt300@8
|
131 fileText << line;
|
rt300@8
|
132
|
rt300@8
|
133 }
|
rt300@8
|
134
|
rt300@8
|
135 theFile.close();
|
rt300@8
|
136 }
|
rt300@8
|
137
|
rt300@8
|
138 bool parsingSuccessful = reader.parse( fileText.str(), root );
|
rt300@8
|
139
|
rt300@8
|
140 if ( !parsingSuccessful )
|
rt300@8
|
141 {
|
rt300@8
|
142 // report to the user the failure and their locations in the document.
|
rt300@8
|
143 std::cout << "Failed to parse preset JSON\n"
|
rt300@8
|
144 << reader.getFormattedErrorMessages();
|
rt300@8
|
145 return;
|
rt300@8
|
146 }
|
rt300@8
|
147
|
rt300@8
|
148 // now put into variables
|
rt300@8
|
149 const Json::Value jpresets = root["presets"];
|
rt300@8
|
150
|
rt300@8
|
151 for ( int index = 0; index < jpresets.size(); ++index ) thePresets.push_back(new Preset(jpresets[index]));
|
rt300@8
|
152
|
rt300@8
|
153 //printAll();
|
rt300@8
|
154
|
rt300@8
|
155 }
|
rt300@4
|
156 //---------------------------------------------------------------------------
|
rt300@4
|
157 void PresetManager::printAll(){
|
rt300@4
|
158 cout << "ALL PRESETS: \n";
|
rt300@4
|
159 vector<Preset *>::iterator presetIter;
|
rt300@4
|
160 for(presetIter = thePresets.begin(); presetIter < thePresets.end(); presetIter++){
|
rt300@5
|
161 cout << **presetIter;
|
rt300@4
|
162
|
rt300@4
|
163 }
|
rt300@0
|
164 }
|
rt300@0
|
165 //---------------------------------------------------------------------------
|
rt300@8
|
166 // when save button pressed
|
rt300@8
|
167 int PresetManager::addPreset(const string name){
|
rt300@3
|
168
|
rt300@3
|
169
|
rt300@0
|
170 // check for same name
|
rt300@0
|
171 vector<Preset *>::iterator iter;
|
rt300@0
|
172 for(iter = thePresets.begin(); iter < thePresets.end(); iter++){
|
rt300@0
|
173 if ((*iter)->name == name){
|
rt300@0
|
174 cout << " Preset by that name exists\n";
|
rt300@0
|
175
|
rt300@0
|
176 // use exceptions!
|
rt300@0
|
177 return -1;
|
rt300@0
|
178 }
|
rt300@0
|
179 }
|
rt300@0
|
180 if(name == ""){
|
rt300@0
|
181 cout << "Please name preset\n";
|
rt300@0
|
182 return -2;
|
rt300@0
|
183
|
rt300@0
|
184 }
|
rt300@8
|
185 // yuk shouldn't have to know about eventlogger and grid view...
|
rt300@8
|
186 thePresets.push_back(new Preset(theGridView.getCoord(), name,nextID, eventLogger.userName, eventLogger.deviceID));
|
rt300@0
|
187
|
rt300@0
|
188 // if ok
|
rt300@0
|
189 return nextID++;
|
rt300@0
|
190 }
|
rt300@8
|
191
|
rt300@5
|
192 //---------------------------------------------------------------------------
|
rt300@4
|
193
|
rt300@4
|
194 int PresetManager::loadPreset(const TwoVector coord, const string name, long long stime){
|
rt300@8
|
195 thePresets.push_back(new Preset(coord, name,nextID, stime));
|
rt300@5
|
196
|
rt300@4
|
197 // if ok
|
rt300@4
|
198 return nextID++;
|
rt300@4
|
199 }
|
rt300@4
|
200 //---------------------------------------------------------------------------
|
rt300@5
|
201 vector<Preset *> PresetManager::getPresetsInRange(const TwoVector min, const TwoVector max){
|
rt300@0
|
202 //return all the coordinates. oh and names (displayed at certain scales?).
|
rt300@3
|
203
|
rt300@3
|
204 // TODO INEFFICIENT FOR LOTS OF PRESETS. CALLED EVERY GRAPHICS UPDATE!
|
rt300@3
|
205 // so: put burden on saving rather than retrieving, make into list and index using coordinates
|
rt300@3
|
206
|
rt300@5
|
207 vector<Preset *> results;
|
rt300@3
|
208 vector<Preset *>::iterator presetIter;
|
rt300@3
|
209 for(presetIter = thePresets.begin(); presetIter < thePresets.end(); presetIter++){
|
rt300@3
|
210 if( ((*presetIter)->coordinates.x > min.x ) && ((*presetIter)->coordinates.y > min.y ) && ((*presetIter)->coordinates.x < max.x ) && ((*presetIter)->coordinates.y < max.y )){
|
rt300@5
|
211 results.push_back(*presetIter);
|
rt300@3
|
212 }
|
rt300@3
|
213
|
rt300@3
|
214 }
|
rt300@3
|
215 return results;
|
rt300@0
|
216
|
rt300@0
|
217 }
|
rt300@5
|
218
|
rt300@5
|
219
|
rt300@5
|
220 //---------------------------------------------------------------------------
|
rt300@5
|
221 void PresetManager::drawPresetsInRange(const TwoVector min, const TwoVector max){
|
rt300@5
|
222 vector<Preset *> pInRange = getPresetsInRange(min, max);
|
rt300@5
|
223 vector<Preset *>::iterator piter;
|
rt300@5
|
224 int i = 0;
|
rt300@5
|
225 for(piter = pInRange.begin(); piter < pInRange.end(); piter++){
|
rt300@5
|
226
|
rt300@5
|
227 (*piter)->draw();
|
rt300@5
|
228 i++;
|
rt300@5
|
229 }
|
rt300@5
|
230
|
rt300@5
|
231 }
|
rt300@8
|
232 //----------------------------------------------cu-----------------------------
|
rt300@3
|
233 void PresetManager::startupLoadAll(){
|
rt300@8
|
234 // get stuff from file
|
rt300@3
|
235 // load file
|
rt300@3
|
236
|
rt300@8
|
237 string fname = ofxiPhoneGetDocumentsDirectory() + PRESET_FILENAME;
|
rt300@5
|
238
|
rt300@8
|
239 readJsonToPresets(fname);
|
rt300@7
|
240
|
rt300@3
|
241 timesOpened++;
|
rt300@3
|
242 }
|
rt300@8
|
243
|
rt300@3
|
244 //---------------------------------------------------------------------------
|
rt300@3
|
245 void PresetManager::exitAndSaveAll(){
|
rt300@8
|
246 ofFile presetFile(ofxiPhoneGetDocumentsDirectory() +PRESET_FILENAME,ofFile::WriteOnly);
|
rt300@4
|
247
|
rt300@8
|
248 // stick all the stuff in a json value
|
rt300@8
|
249 Json::Value root = allPresetsToJson();
|
rt300@5
|
250
|
rt300@8
|
251 cout << root;
|
rt300@8
|
252 presetFile << root;
|
rt300@8
|
253
|
rt300@5
|
254
|
rt300@3
|
255 }
|
rt300@5
|
256
|
rt300@5
|
257 //---------------------------------------------------------------------------
|
rt300@5
|
258 void PresetManager::clearAll(){
|
rt300@5
|
259 thePresets.clear();
|
rt300@5
|
260 }
|
rt300@3
|
261 //---------------------------------------------------------------------------
|
rt300@0
|
262 //---------------------------------------------------------------------------
|
rt300@0
|
263 //---------------------------------------------------------------------------
|
rt300@0
|
264 //---------------------------------------------------------------------------
|
rt300@0
|
265 //--------------------------------------------------------------------------- |