summaryrefslogtreecommitdiff
path: root/gui/src/chainImage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/src/chainImage.cpp')
-rw-r--r--gui/src/chainImage.cpp78
1 files changed, 69 insertions, 9 deletions
diff --git a/gui/src/chainImage.cpp b/gui/src/chainImage.cpp
index 44aaace..67fbad6 100644
--- a/gui/src/chainImage.cpp
+++ b/gui/src/chainImage.cpp
@@ -86,6 +86,27 @@ void chainImage::drawChain(float fadeIn){
glPopMatrix();
}
+Json::Value chainImage::toJson(){
+ Json::Value json=Json::Value(Json::objectValue);
+ json["linkPos"]=Json::Value(Json::arrayValue);
+ json["linkPos"].append(linkPos.x);
+ json["linkPos"].append(linkPos.y);
+ json["linkScale"]=linkScale;
+ json["linkRot"]=linkRot;
+ json["filename"]=filename;
+ return json;
+}
+
+bool chainImage::fromJson(Json::Value json){
+ if (load(json["filename"].asString())){
+ linkPos=ofPoint(json["linkPos"][0].asDouble(),json["linkPos"][1].asDouble());
+ linkScale=json["linkScale"].asDouble();
+ linkRot=json["linkRot"].asDouble();
+ return true;
+ }
+ return false;
+}
+
void chainImageSet::drawGui(){
float t_xoffs=0.0;
float borderwidth=ofGetHeight()*(1.0-THUMB_BORDER_RATIO)*0.5;
@@ -203,10 +224,7 @@ if not make a symbolic link
*/
chainImage image;
if (image.load(filename)){
- image.makeThumbnail();
-
- //could there be a way to load without committing the texture
- image.setUseTexture(false);
+
image.init(ofPoint(0,0),
currentDefaultImageRatio,
0 //default rotation
@@ -295,10 +313,13 @@ void chainImageSet::keyPressed(ofKeyEventArgs &keyargs){
//Check if the user opened a file
if (openFileResult.bSuccess){
- ofLogVerbose("Selected %s\n",openFileResult.filePath);
- //We have a file, check it and process it
- //processOpenFileSelection(openFileResult);
+ bool success=loadJson(openFileResult.fileName);
+
+ ofLogVerbose("Load %s %s\n",
+ openFileResult.filePath.c_str(),
+ success?"succeeded":"failed");
+
}else {
ofLogVerbose("User hit cancel");
@@ -345,10 +366,49 @@ void chainImageSet::mouseReleased(int x, int y, int button){
}
bool chainImageSet::saveJson(std::string filename){
+ ofxJSON json;
+
+ json["images"] = Json::Value(Json::arrayValue);
+
+ for(std::list<chainImage>::iterator ii=images.begin(); ii != images.end(); ii++){
+ json["images"].append(ii->toJson());
+ }
+
+
+ json.save(filename, true);
}
-bool chainImageSet::loadJson(std::string filename){
-
+bool chainImageSet::loadJson(std::string _filename){
+ ofxJSON json;
+ bool parsingSuccessful = json.open(_filename);
+
+ if (parsingSuccessful)
+ {
+ images.clear();
+
+ for (int i=0;i<json["images"].size();i++){
+ chainImage image;
+ if (image.fromJson(json["images"][i])){
+ images.push_back(image);
+ }
+ }
+ for (std::list<chainImage>::iterator ii=images.begin(); ii != images.end(); ii++){
+ auto li=ii;
+ li++;
+ if (li==images.end()) {
+ li=images.begin();
+ }
+ ii->link=&(*li);
+
+ }
+ selected=images.begin();
+ filename=_filename;
+ return true;
+
+
+ }
+ ofLogVerbose("JSON load: parsing unsuccesful\n");
+ return false;
}