rt300@1: // rt300@1: // presetManager.h rt300@1: // oscSenderExample rt300@1: // rt300@1: // Created by Robert Tubb on 07/11/2012. rt300@1: // rt300@1: // rt300@1: rt300@1: // defines: rt300@1: // PresetManager rt300@1: // and Preset rt300@1: rt300@1: #ifndef __oscSenderExample__presetManager__ rt300@1: #define __oscSenderExample__presetManager__ rt300@1: rt300@1: #define PRESET_FILENAME "presets.json" rt300@1: rt300@1: #include rt300@1: #include rt300@1: #include "ofMain.h" rt300@1: #include "ofxiPhone.h" rt300@1: #include "ofxiPhoneExtras.h" rt300@1: #include "eventLogger.h" rt300@1: #include "json.h" rt300@1: #include rt300@12: #include "PresetView.h" rt300@1: rt300@1: //--------------------------------------------------------------------------- rt300@1: class Preset{ rt300@1: public: rt300@1: // important details - these saved to file (uploaded?) rt300@1: string creatorUserName; rt300@1: unsigned int creatorDeviceID; // unique user device ID rt300@1: string name; // name of preset rt300@1: unsigned long long creationTime; // datetime that preset was created milliseconds rt300@5: string imageFileName; rt300@1: vector CCValues; // the actual data rt300@18: //bool isFilled; rt300@12: PresetIconView* iconView; rt300@1: // from save button press rt300@27: Preset(){}; rt300@27: rt300@12: Preset(vector aCCValues, rt300@12: string aname, rt300@12: int aID, rt300@12: string un, rt300@12: unsigned int uid, rt300@12: string imageFile = ""){ rt300@1: CCValues = aCCValues; rt300@18: // if (CCValues.size()){ rt300@18: // isFilled = true; rt300@18: // rt300@18: // }else{ rt300@18: // isFilled = false; rt300@18: // } rt300@1: rt300@1: name = aname; rt300@1: creatorUserName = un; rt300@1: creatorDeviceID = uid; rt300@1: double timemsd = [NSDate timeIntervalSinceReferenceDate]; rt300@1: creationTime = (unsigned long long)(timemsd*1000); rt300@1: rt300@1: //TODO color / texture? rt300@5: imageFileName = imageFile; rt300@12: if (imageFileName != ""){ rt300@12: iconView = new PresetIconView(name, imageFileName); rt300@5: } rt300@6: rt300@1: }; rt300@1: // contruct from json value rt300@1: Preset(Json::Value jval){ rt300@1: rt300@1: name = jval["name"].asString(); rt300@1: creatorUserName = jval["creatorUserName"].asString(); rt300@1: creatorDeviceID = jval["creatorDeviceID"].asUInt(); rt300@1: rt300@1: rt300@1: creationTime = jval["creationTime"].asLargestInt(); // dodgy? rt300@5: imageFileName = jval["imageFileName"].asString(); rt300@1: rt300@1: Json::Value JArray = jval["CCValues"]; rt300@5: rt300@1: if(JArray.size() < 1){ rt300@1: cout << "No Presets"; rt300@1: } rt300@1: for ( unsigned int i = 0; i < JArray.size(); i++ ) rt300@1: { rt300@1: CCValues.push_back(JArray[i].asInt()); rt300@1: } rt300@5: rt300@5: if (imageFileName != ""){ rt300@12: iconView = new PresetIconView(name, imageFileName); rt300@5: } rt300@1: rt300@12: rt300@1: } rt300@12: rt300@12: ofImage* getImage(){ rt300@12: return iconView->getImage(); rt300@12: } rt300@1: Json::Value presetToJson(); rt300@1: rt300@1: string displayTextDescription(){ // eg: for grid hover rt300@1: // objC to C to C++ bleurgh rt300@1: NSDate *ocdate = [NSDate dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)(creationTime/1000.0)]; rt300@1: NSString *dateText = [ocdate description]; rt300@1: const char *date_str = [dateText cStringUsingEncoding:NSASCIIStringEncoding]; rt300@1: stringstream ss; rt300@1: ss << "Name: \t" << name << "\nCreation time: \t" << date_str << "\nCreator: \t" << creatorUserName << '\n'; rt300@1: return ss.str(); rt300@1: rt300@1: } rt300@4: rt300@4: string getName(){ rt300@4: return name; rt300@4: } rt300@4: vector getValues(){ rt300@4: return CCValues; rt300@4: } rt300@18: rt300@18: void overwriteValues(vector v){ rt300@18: if (v.size() != CCValues.size()){ rt300@18: cout << "ERROR: wrong size for vector of CCValues" << endl; rt300@18: } rt300@6: CCValues = v; rt300@6: double timemsd = [NSDate timeIntervalSinceReferenceDate]; rt300@6: creationTime = (unsigned long long)(timemsd*1000); rt300@6: } rt300@6: rt300@1: }; rt300@1: rt300@1: //--------------------------------------------------------------------------- rt300@1: class PresetManager{ rt300@1: public: rt300@5: PresetManager(); rt300@18: void savePreset(Preset * aPreset); rt300@5: void savePreset(string name, vector stuff); rt300@6: void generatePresetSlot(const string name, const string imagefn); rt300@18: vector getPresetValuesForID(int presetID); rt300@18: vector getPresetValuesForName(string name); rt300@5: void startLoadAll(); // load everything from the json file rt300@5: void exitAndSaveAll(); // save stuff to the json file rt300@5: void printAll(); rt300@5: void clearAll(); rt300@27: Preset* getNeutralPreset(); rt300@16: rt300@18: Preset* getPresetAtIndex(int index); rt300@18: int getNumberOfPresets(){return thePresets.size();}; rt300@5: protected: rt300@5: string presetFileName; rt300@1: int nextID; rt300@1: int timesOpened; rt300@1: bool presetAlertShowing; rt300@19: void showOverwriteDialog(); rt300@27: vector thePresets; rt300@27: rt300@5: rt300@5: Json::Value allPresetsToJson(); rt300@5: void loadPresetsFromJsonFile(const string &jsonFile); rt300@5: void updatePresetFile(); rt300@5: void showNameDialog(); rt300@31: void makeNeutralPreset(); rt300@27: Preset neutralPreset; rt300@1: }; rt300@1: rt300@1: rt300@1: #endif /* defined(__oscSenderExample__presetManager__) */