-
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' of git://github.com/openframeworks/ofxXmlSettings
- Loading branch information
Showing
12 changed files
with
18,720 additions
and
0 deletions.
There are no files selected for viewing
Binary file not shown.
12,440 changes: 12,440 additions & 0 deletions
12,440
addons/ofxXmlSettings/example/data/mySettings.xml
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
#include "ofMain.h" | ||
#include "testApp.h" | ||
#include "ofAppGlutWindow.h" | ||
|
||
//======================================================================== | ||
int main( ){ | ||
|
||
ofAppGlutWindow window; | ||
ofSetupOpenGL(&window, 1024,768, OF_WINDOW); // <-------- setup the GL context | ||
|
||
// this kicks off the running of my app | ||
// can be OF_WINDOW or OF_FULLSCREEN | ||
// pass in width and height too: | ||
ofRunApp( new testApp()); | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,260 @@ | ||
#include "testApp.h" | ||
|
||
|
||
//-------------------------------------------------------------- | ||
void testApp::setup(){ | ||
ofBackground(255,255,255); | ||
|
||
//----------- | ||
//the string is printed at the top of the app | ||
//to give the user some feedback | ||
message = "loading mySettings.xml"; | ||
|
||
//we load our settings file | ||
//if it doesn't exist we can still make one | ||
//by hitting the 's' key | ||
if( XML.loadFile("mySettings.xml") ){ | ||
message = "mySettings.xml loaded!"; | ||
}else{ | ||
message = "unable to load mySettings.xml check data/ folder"; | ||
} | ||
|
||
//read the colors from XML | ||
//if the settings file doesn't exist we assigns default values (170, 190, 240) | ||
red = XML.getValue("BACKGROUND:COLOR:RED", 170); | ||
green = XML.getValue("BACKGROUND:COLOR:GREEN", 190); | ||
blue = XML.getValue("BACKGROUND:COLOR:BLUE", 240); | ||
|
||
/* | ||
"BACKGROUND:COLOR:RED" referes to a structure like this: | ||
<BACKGROUND> | ||
<COLOR> | ||
<RED>101.103516</RED> | ||
</COLOR> | ||
</BACKGROUND> | ||
*/ | ||
|
||
//we initalize some of our variables | ||
lastTagNumber = 0; | ||
pointCount = 0; | ||
lineCount = 0; | ||
|
||
|
||
//------- | ||
//this is a more advanced use of ofXMLSettings | ||
//we are going to be reading multiple tags with the same name | ||
|
||
//lets see how many <STROKE> </STROKE> tags there are in the xml file | ||
int numDragTags = XML.getNumTags("STROKE:PT"); | ||
|
||
//if there is at least one <STROKE> tag we can read the list of points | ||
//and then try and draw it as a line on the screen | ||
if(numDragTags > 0){ | ||
|
||
//we push into the last STROKE tag | ||
//this temporarirly treats the tag as | ||
//the document root. | ||
XML.pushTag("STROKE", numDragTags-1); | ||
|
||
//we see how many points we have stored in <PT> tags | ||
int numPtTags = XML.getNumTags("PT"); | ||
|
||
if(numPtTags > 0){ | ||
|
||
//We then read those x y values into our | ||
//array - so that we can then draw the points as | ||
//a line on the screen | ||
|
||
//we have only allocated a certan amount of space for our array | ||
//so we don't want to read more than that amount of points | ||
int totalToRead = MIN(numPtTags, NUM_PTS); | ||
|
||
for(int i = 0; i < totalToRead; i++){ | ||
//the last argument of getValue can be used to specify | ||
//which tag out of multiple tags you are refering to. | ||
int x = XML.getValue("PT:X", 0, i); | ||
int y = XML.getValue("PT:Y", 0, i); | ||
dragPts[i].set(x, y); | ||
pointCount++; | ||
} | ||
} | ||
|
||
//this pops us out of the STROKE tag | ||
//sets the root back to the xml document | ||
XML.popTag(); | ||
} | ||
|
||
//load a monospaced font | ||
//which we will use to show part of the xml structure | ||
TTF.loadFont("mono.ttf", 7); | ||
} | ||
|
||
//-------------------------------------------------------------- | ||
void testApp::update(){ | ||
//we change the background color here based on the values | ||
//affected by the mouse position | ||
ofBackground((int)red,(int)green,(int)blue); | ||
|
||
} | ||
|
||
//-------------------------------------------------------------- | ||
void testApp::draw(){ | ||
|
||
//--------- | ||
//Lets draw the stroke as a continous line | ||
ofSetColor(0x222222); | ||
ofNoFill(); | ||
ofBeginShape(); | ||
for(int i = 0; i < pointCount; i++){ | ||
ofVertex(dragPts[i].x, dragPts[i].y); | ||
} | ||
ofEndShape(false); | ||
|
||
ofFill(); | ||
|
||
//-------- | ||
//we make a black area on the left | ||
//which we can print the xml text on | ||
ofEnableAlphaBlending(); | ||
ofSetColor(0, 0, 0, 200); | ||
ofRect(0, 0, 160, ofGetHeight()); | ||
ofDisableAlphaBlending(); | ||
|
||
//our text that shows how the <STROKE> data looks in the xml file | ||
ofSetColor(240, 240, 240); | ||
|
||
string drawString = "How the data is stored:\n\n"; | ||
if(xmlStructure.size() > 0) drawString += xmlStructure+"</STROKE>"; | ||
TTF.drawString(drawString, 5, 40); | ||
|
||
//the message bars at the top and bottom of the app | ||
//ofSetColor(0xDDDDDD); | ||
ofEnableAlphaBlending(); | ||
ofSetColor(0, 0, 0, 200); | ||
|
||
ofRect(160, 0, ofGetWidth()-160, 20); | ||
ofRect(160, ofGetHeight()-20, ofGetWidth()-160, 20); | ||
|
||
//we draw our status message at the top | ||
//ofSetColor(210, 90, 100); | ||
ofSetColor(240, 240, 240); | ||
TTF.drawString("Save settings to XML hit 's' key status: "+message, 170, 12); | ||
|
||
//instructions at the bottom | ||
TTF.drawString("mouse drag changes background color and records stroke", 168, ofGetHeight() - 9); | ||
} | ||
|
||
//-------------------------------------------------------------- | ||
void testApp::keyPressed (int key){ | ||
|
||
//no data gets saved unless you hit the s key | ||
if(key == 's'){ | ||
XML.saveFile("mySettings.xml"); | ||
message ="settings saved to xml!"; | ||
} | ||
} | ||
|
||
//-------------------------------------------------------------- | ||
void testApp::keyReleased(int key){ | ||
|
||
} | ||
|
||
//-------------------------------------------------------------- | ||
void testApp::mouseMoved(int x, int y ){ | ||
|
||
} | ||
|
||
//-------------------------------------------------------------- | ||
void testApp::mouseDragged(int x, int y, int button){ | ||
|
||
//------- | ||
//we change the background color based on | ||
//the two mouse coords coming in | ||
float xpct = (float)x / ofGetWidth(); | ||
float ypct = (float)y / ofGetHeight(); | ||
red = xpct * 255.0; | ||
green = ypct * 255.0; | ||
blue = (int)(red - green) % 255; | ||
|
||
|
||
//------------- | ||
//we also want to record the stroke | ||
|
||
//lets store the drag of the user. | ||
//we will push into the most recent | ||
//<STROKE> tag - add the mouse points | ||
//then pop out | ||
if( XML.pushTag("STROKE", lastTagNumber) ){ | ||
|
||
//now we will add a pt tag - with two | ||
//children - X and Y | ||
|
||
int tagNum = XML.addTag("PT"); | ||
XML.setValue("PT:X", x, tagNum); | ||
XML.setValue("PT:Y", y, tagNum); | ||
|
||
XML.popTag(); | ||
} | ||
|
||
//------------- | ||
//here we make a string of text that looks like how the xml data | ||
//is stored in the settings file - this is just so people can | ||
//visually see how the data is stored. | ||
|
||
//if the text is about to go off screen | ||
if(lineCount > 64){ | ||
//we find the first <PT> tag with the | ||
//x and y data and we remove it from the begining | ||
//this way the displayed text always shows the newest data | ||
//without going offscreen. | ||
int pos = xmlStructure.find("</PT>"); | ||
xmlStructure = xmlStructure.substr(pos+6); | ||
} | ||
|
||
//here we add the most recent point to our fake xml string | ||
xmlStructure += " <PT>\n <X>"+ofToString(x)+"</X>\n <Y>"+ofToString(y)+"</Y>\n </PT>\n"; | ||
lineCount+=4; //we have added 4 lines so increment by 4 | ||
|
||
//------------ | ||
//we also record the x y points into an array - so we can draw it | ||
if(pointCount < NUM_PTS -1){ | ||
dragPts[pointCount].set(x, y); | ||
pointCount++; | ||
} | ||
|
||
} | ||
|
||
//-------------------------------------------------------------- | ||
void testApp::mousePressed(int x, int y, int button){ | ||
|
||
//we can also add tags with the same name. | ||
//here we are just adding an empty tag | ||
//and when the user drags their mouse | ||
//we will store the pts in this tag | ||
lastTagNumber = XML.addTag("STROKE"); | ||
xmlStructure = "<STROKE>\n"; | ||
|
||
//We start a new stroke | ||
lineCount = 0; | ||
pointCount = 0; | ||
|
||
} | ||
|
||
//-------------------------------------------------------------- | ||
void testApp::mouseReleased(int x, int y, int button){ | ||
|
||
//update the colors to the XML structure when the mouse is released | ||
XML.setValue("BACKGROUND:COLOR:RED", red); | ||
XML.setValue("BACKGROUND:COLOR:GREEN", green); | ||
XML.setValue("BACKGROUND:COLOR:BLUE", blue); | ||
|
||
} | ||
|
||
|
||
//-------------------------------------------------------------- | ||
void testApp::windowResized(int w, int h){ | ||
} | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
#ifndef _TEST_APP | ||
#define _TEST_APP | ||
|
||
|
||
#include "ofMain.h" | ||
#include "ofxXmlSettings.h" | ||
|
||
#define NUM_PTS 800 | ||
|
||
class testApp : public ofBaseApp{ | ||
|
||
public: | ||
|
||
void setup(); | ||
void update(); | ||
void draw(); | ||
|
||
void keyPressed(int key); | ||
void keyReleased(int key); | ||
void mouseMoved(int x, int y ); | ||
void mouseDragged(int x, int y, int button); | ||
void mousePressed(int x, int y, int button); | ||
void mouseReleased(int x, int y, int button); | ||
void windowResized(int w, int h); | ||
|
||
ofxXmlSettings XML; | ||
ofTrueTypeFont TTF; | ||
|
||
string xmlStructure; | ||
string message; | ||
|
||
ofPoint dragPts[NUM_PTS]; | ||
|
||
int pointCount; | ||
int lineCount; | ||
int lastTagNumber; | ||
|
||
float red; | ||
float green; | ||
float blue; | ||
}; | ||
|
||
#endif | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.