rt300@0: // rt300@0: // presetManager.h rt300@0: // oscSenderExample rt300@0: // rt300@0: // Created by Robert Tubb on 07/11/2012. rt300@0: // rt300@0: // rt300@0: rt300@8: // defines: rt300@8: // PresetManager rt300@8: // and Preset rt300@8: rt300@0: #ifndef __oscSenderExample__presetManager__ rt300@0: #define __oscSenderExample__presetManager__ rt300@0: rt300@8: #define PRESET_FILENAME "presets.json" rt300@35: #define PILOT_PRESET_FILENAME "pilot_presets.json" rt300@46: #define FACTORY_PRESET_FILENAME "factory_presets.json" rt300@8: rt300@0: #include rt300@8: #include rt300@0: #include "ofMain.h" rt300@0: #include "ofxiPhone.h" rt300@0: #include "ofxiPhoneExtras.h" rt300@0: #include "2dvector.h" rt300@3: #include "grid.h" rt300@8: #include "eventLogger.h" rt300@8: #include "json.h" rt300@9: #include rt300@8: rt300@16: #import "presetAlertViewController.h" rt300@8: rt300@0: //--------------------------------------------------------------------------- rt300@0: class Preset{ rt300@3: public: rt300@8: // important details - these saved to file (uploaded?) rt300@8: string creatorUserName; rt300@8: unsigned int creatorDeviceID; // unique user device ID rt300@8: string name; // name of preset rt300@9: unsigned long long creationTime; // datetime that preset was created milliseconds rt300@8: vector pixVals; // hmmm rt300@8: TwoVector coordinates; // position on grid rt300@38: vector params; // actual parameters??? rt300@46: unsigned int whichSequence; // the sequence number that this preset was saved with. rt300@46: rt300@3: rt300@5: // from save button press rt300@46: Preset(TwoVector acoord, string aname,int aID, string un, unsigned int uid, unsigned int sequence){ rt300@0: coordinates = acoord; rt300@0: name = aname; rt300@8: creatorUserName = un; rt300@8: creatorDeviceID = uid; rt300@8: double timemsd = [NSDate timeIntervalSinceReferenceDate]; rt300@9: creationTime = (unsigned long long)(timemsd*1000); rt300@9: rt300@9: cout << "Create preset sys time: " << creationTime << "\n"; rt300@8: pixVals = makePresetPicture(coordinates); rt300@46: whichSequence = sequence; rt300@9: rt300@4: }; rt300@8: // from json value rt300@8: Preset(Json::Value jval){ rt300@9: rt300@8: name = jval["name"].asString(); rt300@8: creatorUserName = jval["creatorUserName"].asString(); rt300@8: creatorDeviceID = jval["creatorDeviceID"].asUInt(); rt300@8: coordinates.x = jval["coordinates"].get("x", 0.0).asFloat(); rt300@8: coordinates.y = jval["coordinates"].get("y", 0.0).asFloat(); rt300@9: creationTime = jval["creationTime"].asLargestInt(); // dodgy? rt300@46: whichSequence = jval["whichSequence"].asUInt(); rt300@8: pixVals = makePresetPicture(coordinates); rt300@4: rt300@46: }; rt300@8: // from preset file load rt300@46: Preset(TwoVector acoord, string aname,int aID, long long stime, unsigned int seq){ rt300@4: coordinates = acoord; rt300@4: name = aname; rt300@8: creationTime = stime; rt300@8: pixVals = makePresetPicture(coordinates); rt300@46: whichSequence = seq; rt300@0: }; rt300@5: rt300@8: // from download request?? rt300@8: rt300@5: void draw(); rt300@8: Json::Value presetToJson(); rt300@8: vector makePresetPicture(TwoVector coord); rt300@8: rt300@9: string displayTextDescription(){ // eg: for grid hover rt300@9: // objC to C to C++ bleurgh rt300@9: NSDate *ocdate = [NSDate dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)(creationTime/1000.0)]; rt300@9: NSString *dateText = [ocdate description]; rt300@9: const char *date_str = [dateText cStringUsingEncoding:NSASCIIStringEncoding]; rt300@8: stringstream ss; rt300@46: ss << "Name: \t" << name << "\nCreation time: \t" << date_str << "\nCreator: \t" << creatorUserName << '\n' << "\nSequence: \t" << whichSequence << '\n'; rt300@8: return ss.str(); rt300@8: rt300@8: } rt300@0: }; rt300@3: rt300@3: //--------------------------------------------------------------------------- rt300@0: class PresetManager{ rt300@0: public: rt300@0: int nextID; rt300@3: int timesOpened; rt300@22: bool presetAlertShowing; rt300@22: rt300@0: // names values rt300@0: // check if already there rt300@0: // find and return all(?) presets within a certain coordinate range rt300@44: vector thePresets; rt300@0: rt300@38: int addPreset(string name); rt300@46: rt300@0: TwoVector recallPreset(int presetID); // by name ? id? rt300@0: TwoVector recallPreset(string name); // by name ? id? rt300@5: vector getPresetsInRange(TwoVector min, TwoVector max); rt300@5: void drawPresetsInRange(const TwoVector min, const TwoVector max); rt300@4: void printAll(); rt300@0: rt300@30: void startLoadAll(); // get stuff from XML rt300@0: void exitAndSaveAll(); // save to XML, delete presets array (?) rt300@5: void clearAll(); rt300@8: Json::Value allPresetsToJson(); rt300@8: void readJsonToPresets(const string &jsonFile); rt300@9: void showNameDialog(); rt300@0: PresetManager(); rt300@32: void saveSessionToFile(string userName); rt300@0: }; rt300@0: rt300@4: rt300@0: #endif /* defined(__oscSenderExample__presetManager__) */