#include <string>
#include <stdlib.h>
#include <objgfx40.h>
#include <vContext.h>
#include <sStyle.h>
#include <sTypes.h>
#include <map.h>
vContext::vContext(vContext * parent) {
pContext = parent;
realView = new ogSurface();
curX = curY = width = height = 0;
attached = false;
return;
} // vContext::vContext
vContext *
vContext::vAttach(vContext * context) {
/*
* vContext::vAttach()
* Accepts a vContext as a parameter and attaches it to the
* current child context list.
* Returns the child context pointer
*/
cContexts.push_back(context);
return context;
} // vContext::vAttach
void
vContext::vDeleteAllStyles(void) {
/*
* vContext::vDeleteAllStyle()
* Deletes all style entries in this node of the style tree.
*/
if (styles.empty()) return;
// create a map<> iterator that points to the beginning style
map<const std::string, sStyle *>::iterator curStyle = styles.begin();
// loop through the styles, deleting them and calling the style object's
// destructor
while (curStyle != styles.end()) {
std::string str = curStyle->first;
sStyle * tmpStyle = dynamic_cast<sStyle *>(styles[str]);
// if (tmpStyle != NULL) cout << "deleting styles[\"" << str << "\"]" << endl;
styles.erase(curStyle);
delete tmpStyle;
++curStyle;
} // while
return;
} // vContext::vDeleteAllStyles
bool
vContext::vDeleteStyle(const std::string styleKey) {
/*
* vContext::vDeleteStyle()
* returns true if style existed and was deleted
* returns false if style didn't exist (or wasn't deleted)
*/
sStyle * tmpStyle = styles[styleKey];
styles.erase(styleKey);
delete tmpStyle;
return (tmpStyle != NULL);
} // vContext::vDeleteStyle
vContext *
vContext::vDetach(vContext * context) {
cContexts.remove(context);
return context;
} // vContext::vDetach
/*
* void
* vContext::Draw(void) {
* return;
* } // vContext::Draw
*/
sStyle *
vContext::vGetStyle(const std::string styleKey) {
/*
* GetStyle()
* retreives a style out of the style map using the styleKey string
* If no style is present in this node, check the parent
*/
sStyle * tmpStyle = styles[styleKey];
if ((tmpStyle == NULL) && (pContext != NULL)) {
return pContext->vGetStyle(styleKey);
} // if
return tmpStyle;
} // vContext::vGetStyle
void
vContext::vSetPos(int32 newX, int32 newY) {
/*
* vContext::SetPos()
* Sets new position relative to parent's upper left corner
*/
// I really should detach from the parent here
if ((attached) && (pContext != NULL)) pContext->vDetach(this);
curX = newX;
curY = newY;
// and reattach to parent here
if ((attached) && (pContext != NULL)) pContext->vAttach(this);
return;
} // vContext::vSetPos
void
vContext::vSetSize(uInt32 newWidth, uInt32 newHeight) {
// if ((attached) && (pContext != NULL)) pContext->vDetach(this);
width = newWidth;
height = newHeight;
// if ((attached) && (pContext != NULL)) pContext->vAttach(this);
} // vContext::vSetSize
void
vContext::vSetStyle(const std::string styleKey, sStyle * style) {
// I probably should check to see if a style exists before setting it
// if the style is null, then just exit out without setting it
if (style == NULL) return;
// set the new style
styles[styleKey] = style;
} // vContext::vSetStyle
vContext::~vContext(void) {
delete realView;
realView = pContext = NULL;
curX = curY = width = height = 0;
vDeleteAllStyles();
return;
} // vContext::~vContext