view presetManager.h @ 31:a677c027e3a0

Demo to Simon, kinda works. 4 reps of sequence.
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Fri, 21 Nov 2014 17:07:56 +0000
parents 27cdf475aa4b
children d810aa9ca03a
line wrap: on
line source
//
//  presetManager.h
//  oscSenderExample
//
//  Created by Robert Tubb on 07/11/2012.
//
//

// defines:
//      PresetManager
// and Preset

#ifndef __oscSenderExample__presetManager__
#define __oscSenderExample__presetManager__

#define PRESET_FILENAME "presets.json"

#include <iostream>
#include <string>
#include "ofMain.h"
#include "ofxiPhone.h"
#include "ofxiPhoneExtras.h"
#include "eventLogger.h"
#include "json.h"
#include <ctime>
#include "PresetView.h"

//---------------------------------------------------------------------------
class Preset{
public:
    // important details - these saved to file (uploaded?)
    string          creatorUserName;
    unsigned int    creatorDeviceID; // unique user device ID
    string          name; // name of preset
    unsigned long long       creationTime; // datetime that preset was created milliseconds
    string imageFileName;
    vector<int> CCValues; // the actual data
    //bool isFilled;
    PresetIconView* iconView;
    // from save button press
    Preset(){};
    
    Preset(vector<int> aCCValues,
           string aname,
           int aID,
           string un,
           unsigned int uid,
           string imageFile = ""){
        CCValues = aCCValues;
//        if (CCValues.size()){
//            isFilled = true;
//            
//        }else{
//            isFilled = false;
//        }

        name = aname;
        creatorUserName = un;
        creatorDeviceID = uid;
        double timemsd = [NSDate timeIntervalSinceReferenceDate];
        creationTime = (unsigned long long)(timemsd*1000);

        //TODO color / texture?
        imageFileName = imageFile;
        if (imageFileName != ""){
            iconView = new PresetIconView(name, imageFileName);
        }

    };
    // contruct from json value
    Preset(Json::Value jval){

        name = jval["name"].asString();
        creatorUserName = jval["creatorUserName"].asString();
        creatorDeviceID = jval["creatorDeviceID"].asUInt();


        creationTime = jval["creationTime"].asLargestInt(); // dodgy?
        imageFileName = jval["imageFileName"].asString();
        
        Json::Value JArray = jval["CCValues"];
        
        if(JArray.size() < 1){
            cout << "No Presets";
        }
        for ( unsigned int i = 0; i < JArray.size(); i++ )
        {
            CCValues.push_back(JArray[i].asInt());
        }
        
        if (imageFileName != ""){
            iconView = new PresetIconView(name, imageFileName);
        }


    }

    ofImage* getImage(){
        return iconView->getImage();
    }
    Json::Value presetToJson();
 
    string displayTextDescription(){ // eg: for grid hover
        // objC to C to C++ bleurgh
        NSDate *ocdate = [NSDate dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)(creationTime/1000.0)];
        NSString *dateText = [ocdate description];
        const char *date_str = [dateText cStringUsingEncoding:NSASCIIStringEncoding];
        stringstream ss;
        ss << "Name: \t" << name << "\nCreation time: \t" << date_str << "\nCreator: \t" << creatorUserName << '\n';
        return ss.str();
        
    }
    
    string getName(){
        return name;
    }
    vector<int> getValues(){
        return CCValues;
    }
    
    void overwriteValues(vector<int> v){
        if (v.size() != CCValues.size()){
            cout << "ERROR: wrong size for vector of CCValues" << endl;
        }
        CCValues = v;
        double timemsd = [NSDate timeIntervalSinceReferenceDate];
        creationTime = (unsigned long long)(timemsd*1000);
    }
    
};

//---------------------------------------------------------------------------
class PresetManager{
public:
    PresetManager();
    void savePreset(Preset * aPreset);
    void savePreset(string name, vector<int> stuff);
    void generatePresetSlot(const string name, const string imagefn);
    void saveFilledSlotToFile();
    vector<int> getPresetValuesForID(int presetID);
    vector<int> getPresetValuesForName(string name);
    void startLoadAll(); // load everything from the json file
    void exitAndSaveAll(); // save stuff to the json file
    void printAll();
    void clearAll();
    Preset* getNeutralPreset();
    
    Preset* getPresetAtIndex(int index);
    int getNumberOfPresets(){return thePresets.size();};
protected:
    string presetFileName;
    int nextID;
    int timesOpened;
    bool presetAlertShowing;
    void showOverwriteDialog();
    vector<Preset *> thePresets;


    Json::Value  allPresetsToJson();
    void loadPresetsFromJsonFile(const string &jsonFile);
    void updatePresetFile();
    void showNameDialog();
    void makeNeutralPreset();
    Preset neutralPreset;
};

    
#endif /* defined(__oscSenderExample__presetManager__) */