Index: /trunk/include/core/RpAbout.h
===================================================================
--- /trunk/include/core/RpAbout.h	(revision 38)
+++ /trunk/include/core/RpAbout.h	(revision 38)
@@ -0,0 +1,104 @@
+
+#include <iostream>
+#include <string>
+#include <sstream>
+#include <stdlib.h>
+#include <errno.h>
+
+
+// #include "RpLibrary.h"
+
+#ifndef _RpABOUT_H 
+#define _RpABOUT_H
+
+class RpAbout
+{
+    public:
+        
+        // users member fxns
+
+        virtual RpAbout& setLabel       (std::string newLabel);
+        virtual RpAbout& setDesc        (std::string newDesc);
+        virtual RpAbout& setHints       (std::string newHints);
+        virtual RpAbout& setColor       (std::string newColor);
+        virtual RpAbout& setIcon        (std::string newIcon);
+
+        virtual std::string getLabel    () const;
+        virtual std::string getDesc     () const;
+        virtual std::string getHints    () const;
+        virtual std::string getColor    () const;
+        virtual std::string getIcon     () const;
+
+        RpAbout ()
+            :   label       (""),
+                desc        (""),
+                hints       (""),
+                color       (""),
+                icon        ("")
+        {};
+
+        RpAbout (
+                    std::string label
+                )
+            :   label       (label),
+                desc        (""),
+                hints       (""),
+                color       (""),
+                icon        ("")
+        {};
+
+        RpAbout (
+                    std::string label,
+                    std::string desc
+                )
+            :   label       (label),
+                desc        (desc),
+                hints       (""),
+                color       (""),
+                icon        ("")
+        {};
+
+        RpAbout (
+                    std::string label,
+                    std::string desc,
+                    std::string hints,
+                    std::string color,
+                    std::string icon
+                )
+            :   label       (label),
+                desc        (desc),
+                hints       (hints),
+                color       (color),
+                icon        (icon)
+        {}
+        
+        // copy constructor
+        RpAbout ( const RpAbout& myRpAbout ) 
+            :   label       (myRpAbout.label),
+                desc        (myRpAbout.desc),
+                hints       (myRpAbout.hints),
+                color       (myRpAbout.color),
+                icon        (myRpAbout.icon)
+        {}
+
+        // default destructor
+        virtual ~RpAbout ()
+        {
+            // clean up dynamic memory
+        }
+
+    private:
+
+        std::string label;
+        std::string desc;
+        std::string hints;
+        std::string color;
+        std::string icon;
+
+
+};
+
+/*--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
+
+#endif
Index: /trunk/include/core/RpBoolean.h
===================================================================
--- /trunk/include/core/RpBoolean.h	(revision 38)
+++ /trunk/include/core/RpBoolean.h	(revision 38)
@@ -0,0 +1,74 @@
+#include <iostream>
+#include <string>
+#include <sstream>
+#include <stdlib.h>
+#include <errno.h>
+
+
+// #include "RpLibrary.h"
+
+#ifndef _RpVARIABLE_H
+    #include "RpVariable.h"
+#endif
+
+#ifndef _RpBOOLEAN_H 
+#define _RpBOOLEAN_H
+
+class RpBoolean : public RpVariable
+{
+    public:
+        
+        // users member fxns
+
+        virtual RpBoolean& setDefaultValue   (std::string newDefaultVal);
+        virtual RpBoolean& setCurrentValue   (std::string newCurrentVal);
+
+        // base class makes 
+        // these functions virtual and derived class has a different
+        // return type. compiler doesnt like this. need to find another
+        // way around this
+        //
+        // if we keep the null_val=NULL will that give us undefined behavior?
+        //
+        std::string getDefaultValue         (void* null_val=NULL) const;
+        std::string getCurrentValue         (void* null_val=NULL) const;
+
+        // place the information from this object into the xml library 'lib'
+        // virtual RpBoolean& put(RpLibrary lib);
+        // RpBoolean& put() const;
+
+        RpBoolean (
+                    std::string path, 
+                    std::string defaultVal
+                )
+            :   RpVariable  (path, new std::string (defaultVal) )
+        { }
+
+        RpBoolean (
+                    std::string path, 
+                    std::string defaultVal,
+                    std::string label,
+                    std::string desc
+                )
+            :   RpVariable  (path, new std::string (defaultVal), label, desc)
+        { }
+        
+        // copy constructor
+        RpBoolean ( const RpBoolean& myRpBoolean )
+            :   RpVariable(myRpBoolean)
+        {}
+
+        // default destructor
+        virtual ~RpBoolean ()
+        {
+            // clean up dynamic memory
+        }
+
+    private:
+
+};
+
+/*--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
+
+#endif
Index: /trunk/include/core/RpChoice.h
===================================================================
--- /trunk/include/core/RpChoice.h	(revision 38)
+++ /trunk/include/core/RpChoice.h	(revision 38)
@@ -0,0 +1,129 @@
+#include <iostream>
+#include <string>
+#include <sstream>
+#include <stdlib.h>
+#include <errno.h>
+#include <vector>
+
+
+// #include "RpLibrary.h"
+
+#ifndef _RpVARIABLE_H
+    #include "RpVariable.h"
+#endif
+
+#ifndef _RpOPTION_H
+    #include "RpOption.h"
+#endif
+
+#ifndef _RpCHOICE_H 
+#define _RpCHOICE_H
+
+class RpChoice : public RpVariable
+{
+    public:
+        
+        // users member fxns
+
+        virtual RpChoice& setDefaultValue   (std::string newDefaultVal);
+        virtual RpChoice& setCurrentValue   (std::string newCurrentVal);
+        virtual RpChoice& setOption         (std::string newOption);
+        virtual RpChoice& deleteOption      (std::string newOption);
+
+        // changed from "Value" to "Val" because base class makes 
+        // these functions virtual and derived class has a different
+        // return type. compiler doesnt like this. need to find another
+        // way around this
+        //
+        // if we keep the null_val=NULL will that give us undefined behavior?
+        //
+        virtual std::string getDefaultValue (void* null_val=NULL) const;
+        virtual std::string getCurrentValue (void* null_val=NULL) const;
+        virtual std::string getFirstOption  ();
+        virtual std::string getNextOption   ();
+        virtual unsigned int getOptListSize () const;
+
+        
+        // place the information from this object into the xml library 'lib'
+        // virtual RpChoice& put(RpLibrary lib);
+        // RpChoice& put() const;
+
+        RpChoice (
+                    std::string path, 
+                    std::string defaultVal,
+                    std::string optionList
+                )
+            :   RpVariable  (path, new std::string (defaultVal) )
+        {
+            // optionList is a comma separated list of options
+
+            optionsIter = options.begin();
+            std::string::size_type pos = optionList.find (',',0);
+            std::string::size_type lastPos = 0;
+            std::string tmpStr;
+            
+
+            while (pos != std::string::npos) {
+                tmpStr = optionList.substr(lastPos, pos-lastPos);
+                setOption(tmpStr);
+                lastPos = pos + 1;
+                pos = optionList.find (",",lastPos);
+            }
+
+            tmpStr = optionList.substr(lastPos);
+            setOption(tmpStr);
+
+        }
+
+        RpChoice (
+                    std::string path, 
+                    std::string defaultVal,
+                    std::string label,
+                    std::string desc,
+                    std::string optionList
+                )
+            :   RpVariable  (path, new std::string (defaultVal), label, desc)
+        { 
+            // optionList is a comma separated list of options
+
+            optionsIter = options.begin();
+            std::string::size_type pos = optionList.find (',',0);
+            std::string::size_type lastPos = 0;
+            std::string tmpStr;
+            
+
+            while (pos != std::string::npos) {
+                tmpStr = optionList.substr(lastPos, pos-lastPos);
+                setOption(tmpStr);
+                lastPos = pos + 1;
+                pos = optionList.find (",",lastPos);
+            }
+
+            tmpStr = optionList.substr(lastPos);
+            setOption(tmpStr);
+
+        }
+        
+        // copy constructor
+        RpChoice ( const RpChoice& myRpChoice )
+            :   RpVariable      (myRpChoice),
+                options         (myRpChoice.options)
+        {
+        }
+
+        // default destructor
+        virtual ~RpChoice ()
+        {
+            // clean up dynamic memory
+
+        }
+    private:
+
+        std::vector<RpOption> options;
+        std::vector<RpOption>::iterator optionsIter;
+};
+
+/*--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
+
+#endif
Index: /trunk/include/core/RpDict.h
===================================================================
--- /trunk/include/core/RpDict.h	(revision 37)
+++ /trunk/include/core/RpDict.h	(revision 38)
@@ -32,8 +32,8 @@
 
         // send the search iterator to the beginning of the hash table
-        virtual RpDictEntry<KeyType,ValType>* first();
+        /*virtual*/ RpDictEntry<KeyType,ValType>* first();
 
         // send the search iterator to the next element of the hash table
-        virtual RpDictEntry<KeyType,ValType>* next();
+        /*virtual*/ RpDictEntry<KeyType,ValType>* next();
 /*
         RpDictIterator(RpDict* table_Ptr)
@@ -195,5 +195,5 @@
         
         // checks table size
-        virtual const int size() const;
+        /*virtual*/ const int size() const;
 
         // insert new object into table
@@ -201,5 +201,5 @@
         // returns !0 on failure (object cannot be inserted or dne)
         //
-        virtual RpDict<KeyType,ValType>& 
+        /*virtual*/ RpDict<KeyType,ValType>& 
                         set(    KeyType& key, 
                                 ValType& value, 
@@ -208,8 +208,8 @@
         // find an RpUnits object that should exist in RpUnitsTable
         // 
-        virtual RpDictEntry<KeyType,ValType>& 
+        /*virtual*/ RpDictEntry<KeyType,ValType>& 
                         find( KeyType& key );
 
-        virtual RpDictEntry<KeyType,ValType>& operator[]( KeyType& key) 
+        /*virtual*/ RpDictEntry<KeyType,ValType>& operator[]( KeyType& key) 
         { 
             return find(key); 
@@ -218,8 +218,8 @@
         // clear the entire table
         // iterate through the table and call erase on each element
-        virtual RpDict<KeyType,ValType>& clear();
+        /*virtual*/ RpDict<KeyType,ValType>& clear();
 
         // get the nullEntry hash entry for initialization of references
-        virtual RpDictEntry<KeyType,ValType>& getNullEntry();
+        /*virtual*/ RpDictEntry<KeyType,ValType>& getNullEntry();
 
         // template <KeyType, ValType> friend class RpDictEntry;
@@ -258,5 +258,5 @@
 
         // destructor
-        virtual ~RpDict() 
+        /*virtual*/ ~RpDict() 
         {
             // probably need to delete all the entries as well
Index: /trunk/include/core/RpNumber.h
===================================================================
--- /trunk/include/core/RpNumber.h	(revision 38)
+++ /trunk/include/core/RpNumber.h	(revision 38)
@@ -0,0 +1,169 @@
+#include <iostream>
+#include <string>
+#include <sstream>
+#include <stdlib.h>
+#include <errno.h>
+
+
+// #include "RpLibrary.h"
+
+#ifndef _RpVARIABLE_H
+    #include "RpVariable.h"
+#endif
+
+#ifndef _RpUNITS_H
+    #include "RpUnits.h"
+#endif
+
+#ifndef _RpNUMBER_H 
+#define _RpNUMBER_H
+
+class RpNumber : public RpVariable
+{
+    public:
+        
+        // users member fxns
+
+        /*
+        virtual RpNumber& setUnits(std::string newUnits);
+        */
+
+        virtual RpNumber& setDefaultValue(double newDefaultVal);
+        virtual RpNumber& setCurrentValue(double newCurrentVal);
+        virtual RpNumber& setMin(double newMin);
+        virtual RpNumber& setMax(double newMax);
+
+        std::string getUnits() const;
+        // changed from "Value" to "Val" because base class makes 
+        // these functions virtual and derived class has a different
+        // return type. compiler doesnt like this. need to find another
+        // way around this
+        //
+        // if we keep the null_val=NULL will that give us undefined behavior?
+        //
+        double getDefaultValue(void* null_val=NULL) const;
+        double getCurrentValue(void* null_val=NULL) const;
+        double getMin() const;
+        double getMax() const;
+
+        double convert( std::string toUnitStr, 
+                        int storeResult, 
+                        int* result = NULL  );
+        double convert(std::string toUnitStr, int* result = NULL);
+        double convert(RpUnits* toUnit, int* result = NULL);
+        
+        // place the information from this object into the xml library 'lib'
+        // virtual RpNumber& put(RpLibrary lib);
+        // RpNumber& put() const;
+
+        
+
+        /* 
+         * user provides a 'path' for where this object lives in xml file
+         * user calls define with standard hints as described in Number docs
+         *  'units' - string providing units of the number
+         *  'defaultVal' - numeric value to be used if user provides no value
+         *  'min' - (optional) minimum allowed value
+         *  'max' - (optional) maximum allowed value
+         *  'label' - (optional) name of the input for a gui field
+         *  'desc' - (optional) description of the input for the gui
+         *
+         *  Notes: 
+         *      if the user sets a min or max value the following applies:
+         *          if the value of min is greater than the value of default,
+         *          then min will be set to default
+         *
+         *          if the value of max is less than the value of default, 
+         *          then max will be set to default.
+         *
+         *
+         *          
+         */
+        
+        /* what about unit-less numbers */
+        RpNumber (
+                    std::string path, 
+                    std::string units,
+                    double defaultVal
+                )
+            :   RpVariable  (path, new double (defaultVal) ),
+                // units       (units),
+                min         (0),
+                max         (0),
+                minmaxSet   (0)
+        {
+            this->units = RpUnits::find(units);
+            if (! this->units) {
+                this->units = RpUnits::define(units,NULL);
+            }
+        }
+
+        RpNumber (
+                    std::string path, 
+                    std::string units,
+                    double defaultVal,
+                    double min,
+                    double max,
+                    std::string label,
+                    std::string desc
+                )
+            :   RpVariable  (path, new double (defaultVal), label, desc),
+                // units       (units),
+                min         (min),
+                max         (max),
+                minmaxSet   (0)
+        { 
+
+            this->units = RpUnits::find(units);
+            if (! this->units) {
+                this->units = RpUnits::define(units,NULL);
+            }
+
+            if ((min == 0) && (max == 0)) {
+                minmaxSet = 0;
+            }
+            else {
+
+                if (min > defaultVal) {
+                    this->min = defaultVal;
+                }
+
+                if (max < defaultVal) {
+                    this->max = defaultVal;
+                }
+            }
+
+        }
+        
+        // copy constructor
+        RpNumber ( const RpNumber& myRpNumber )
+            :   RpVariable(myRpNumber),
+                units       (myRpNumber.units),
+                min         (myRpNumber.min),
+                max         (myRpNumber.max),
+                minmaxSet   (myRpNumber.minmaxSet)
+        {}
+
+        // default destructor
+        // virtual ~RpNumber ()
+        virtual ~RpNumber ()
+        {
+            // clean up dynamic memory
+
+        }
+    private:
+
+        // std::string units;
+        RpUnits* units;
+        double min;
+        double max;
+
+        // flag to tell if the user specified the min and max values 
+        int minmaxSet;
+
+};
+
+/*--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
+
+#endif
Index: /trunk/include/core/RpOption.h
===================================================================
--- /trunk/include/core/RpOption.h	(revision 38)
+++ /trunk/include/core/RpOption.h	(revision 38)
@@ -0,0 +1,57 @@
+
+#include <iostream>
+#include <string>
+#include <sstream>
+#include <stdlib.h>
+#include <errno.h>
+
+// #include "RpLibrary.h"
+
+#ifndef _RpABOUT_H
+    #include "RpAbout.h"
+#endif
+
+#ifndef _RpOPTION_H 
+#define _RpOPTION_H
+
+class RpOption
+{
+    public:
+        
+        // users member fxns
+
+        virtual RpOption& setLabel       (std::string newLabel);
+        virtual std::string getLabel    () const;
+
+        /*
+        RpOption ()
+            :   about       (RpAbout())
+        {};
+        */
+
+        RpOption (
+                    std::string label
+                )
+            :   about       (RpAbout(label))
+        {};
+        
+        // copy constructor
+        RpOption ( const RpOption& myRpOption ) 
+            :   about       (RpAbout(myRpOption.about))
+        {}
+
+        // default destructor
+        virtual ~RpOption ()
+        {
+            // clean up dynamic memory
+        }
+
+    private:
+
+        RpAbout about;
+};
+
+/*--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
+
+#endif
Index: /trunk/include/core/RpString.h
===================================================================
--- /trunk/include/core/RpString.h	(revision 38)
+++ /trunk/include/core/RpString.h	(revision 38)
@@ -0,0 +1,106 @@
+#include <iostream>
+#include <string>
+#include <sstream>
+#include <stdlib.h>
+#include <errno.h>
+
+
+// #include "RpLibrary.h"
+
+#ifndef _RpVARIABLE_H
+    #include "RpVariable.h"
+#endif
+
+#ifndef _RpSTRING_H 
+#define _RpSTRING_H
+
+class RpString : public RpVariable
+{
+    public:
+        
+        // users member fxns
+
+        virtual RpString& setDefaultValue   (std::string newDefaultVal);
+        virtual RpString& setCurrentValue   (std::string newCurrentVal);
+        virtual RpString& setSize           (std::string newSize);
+        virtual RpString& setHeight         (int newHeight);
+        virtual RpString& setWidth          (int newWidth);
+
+        // base class makes 
+        // these functions virtual and derived class has a different
+        // return type. compiler doesnt like this. need to find another
+        // way around this
+        //
+        // if we keep the null_val=NULL will that give us undefined behavior?
+        //
+        std::string getDefaultValue         (void* null_val=NULL) const;
+        std::string getCurrentValue         (void* null_val=NULL) const;
+        std::string getSize                 () const;
+        int         getHeight               () const;
+        int         getWidth                () const;
+
+        // place the information from this object into the xml library 'lib'
+        // virtual RpString& put(RpLibrary lib);
+        // RpString& put() const;
+
+        RpString (
+                    std::string path, 
+                    std::string defaultVal
+                )
+            :   RpVariable  (path, new std::string (defaultVal) ),
+                width       (0),
+                height      (0)
+        {}
+
+        RpString (
+                    std::string path, 
+                    std::string defaultVal,
+                    std::string sizeWxH
+                )
+            :   RpVariable  (path, new std::string (defaultVal) ),
+                width       (0),
+                height      (0)
+        {
+            setSize(sizeWxH);
+        }
+
+        RpString (
+                    std::string path, 
+                    std::string defaultVal,
+                    std::string sizeWxH,
+                    std::string label,
+                    std::string desc
+                )
+            :   RpVariable  (path, new std::string (defaultVal), label, desc),
+                width       (0),
+                height      (0)
+        {
+            setSize(sizeWxH);
+        }
+        
+        // copy constructor
+        RpString ( const RpString& myRpString )
+            :   RpVariable(myRpString),
+                width       (myRpString.width),
+                height      (myRpString.height)
+        {}
+
+        // default destructor
+        virtual ~RpString ()
+        {
+            // clean up dynamic memory
+        }
+
+    private:
+        int width;
+        int height;
+        std::string hints;
+
+        
+
+};
+
+/*--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
+
+#endif
Index: /trunk/include/core/RpUnits.h
===================================================================
--- /trunk/include/core/RpUnits.h	(revision 37)
+++ /trunk/include/core/RpUnits.h	(revision 38)
@@ -5,5 +5,8 @@
 #include <errno.h>
 
-#include "RpDict.h"
+#ifndef _RpDICT_H
+    #include "RpDict.h"
+#endif
+
 #include "RpUnitsStd.h"
 
Index: /trunk/include/core/RpVariable.h
===================================================================
--- /trunk/include/core/RpVariable.h	(revision 38)
+++ /trunk/include/core/RpVariable.h	(revision 38)
@@ -0,0 +1,102 @@
+
+#include <iostream>
+#include <string>
+#include <sstream>
+#include <stdlib.h>
+#include <errno.h>
+
+
+// #include "RpLibrary.h"
+
+#ifndef _RpABOUT_H
+    #include "RpAbout.h"
+#endif
+
+#ifndef _RpVARIABLE_H 
+#define _RpVARIABLE_H
+
+class RpVariable
+{
+    public:
+        
+        // users member fxns
+
+        virtual RpVariable& setPath         (std::string newPath);
+        virtual RpVariable& setDefaultValue (void* newDefaultVal);
+        virtual RpVariable& setCurrentValue (void* newCurrentVal);
+        virtual RpVariable& setLabel        (std::string newLabel);
+        virtual RpVariable& setDesc         (std::string newDesc);
+        virtual RpVariable& setHints        (std::string newHints);
+        virtual RpVariable& setColor        (std::string newColor);
+        virtual RpVariable& setIcon         (std::string newIcon);
+
+        virtual std::string getPath         () const;
+        /* maybe we dont need 2 get functions? */
+        virtual void* getDefaultValue       () const;
+        virtual void* getCurrentValue       () const;
+        virtual std::string getLabel        () const;
+        virtual std::string getDesc         () const;
+        virtual std::string getHints        () const;
+        virtual std::string getColor        () const;
+        virtual std::string getIcon         () const;
+
+        // place the information from this object into the xml library 'lib'
+        // virtual RpNumber& put(RpLibrary lib);
+        // virtual RpVariable& put() const;
+
+        // we need a copy of defaultVal in currentVal, not the same pointer.
+        // need to fix this.
+        
+        RpVariable (
+                    std::string path, 
+                    void* defaultVal
+                )
+            :   about       (RpAbout()),
+                path        (path),
+                defaultVal  (defaultVal),
+                currentVal  (defaultVal)
+        {
+            // about's default no-arg const is called
+        };
+
+        RpVariable (
+                    std::string path, 
+                    void* defaultVal,
+                    std::string label,
+                    std::string desc
+                )
+            :   about       (RpAbout(label,desc)),
+                path        (path),
+                defaultVal  (defaultVal),
+                currentVal  (defaultVal)
+        {}
+        
+        // copy constructor
+        RpVariable ( const RpVariable& myRpVariable ) 
+                // will the RpAbout copy constructor be called here?
+            :   about       (RpAbout(myRpVariable.about)),
+                path        (myRpVariable.path),
+                defaultVal  (myRpVariable.defaultVal),
+                currentVal  (myRpVariable.currentVal)
+        {}
+
+        // default destructor
+        virtual ~RpVariable ()
+        {
+            // clean up dynamic memory
+        }
+
+    private:
+
+        RpAbout about;
+        std::string path;
+        void* defaultVal;
+        void* currentVal;
+
+
+};
+
+/*--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
+
+#endif
