[mapguide-commits] r1296 - in trunk/MgDev: Common/MdfModel Common/MdfParser Common/Schema Common/Stylization UnitTest/TestData/Symbology

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Tue Mar 20 10:04:19 EDT 2007


Author: waltweltonlair
Date: 2007-03-20 10:04:18 -0400 (Tue, 20 Mar 2007)
New Revision: 1296

Modified:
   trunk/MgDev/Common/MdfModel/AreaUsage.cpp
   trunk/MgDev/Common/MdfModel/AreaUsage.h
   trunk/MgDev/Common/MdfModel/GraphicElement.cpp
   trunk/MgDev/Common/MdfModel/GraphicElement.h
   trunk/MgDev/Common/MdfModel/LineUsage.cpp
   trunk/MgDev/Common/MdfModel/LineUsage.h
   trunk/MgDev/Common/MdfModel/Parameter.cpp
   trunk/MgDev/Common/MdfModel/Parameter.h
   trunk/MgDev/Common/MdfModel/Path.cpp
   trunk/MgDev/Common/MdfModel/Path.h
   trunk/MgDev/Common/MdfModel/PointUsage.cpp
   trunk/MgDev/Common/MdfModel/ResizeBox.cpp
   trunk/MgDev/Common/MdfModel/ResizeBox.h
   trunk/MgDev/Common/MdfModel/SymbolInstance.h
   trunk/MgDev/Common/MdfParser/IOAreaUsage.cpp
   trunk/MgDev/Common/MdfParser/IOCompoundSymbolDefinition.cpp
   trunk/MgDev/Common/MdfParser/IOGraphicElement.cpp
   trunk/MgDev/Common/MdfParser/IOGraphicElementCollection.cpp
   trunk/MgDev/Common/MdfParser/IOLineUsage.cpp
   trunk/MgDev/Common/MdfParser/IOParameter.cpp
   trunk/MgDev/Common/MdfParser/IOPath.cpp
   trunk/MgDev/Common/MdfParser/IOResizeBox.cpp
   trunk/MgDev/Common/MdfParser/IOSimpleSymbol.cpp
   trunk/MgDev/Common/MdfParser/IOStroke.cpp
   trunk/MgDev/Common/MdfParser/IOSymbolInstance.cpp
   trunk/MgDev/Common/MdfParser/IOSymbolInstanceCollection.cpp
   trunk/MgDev/Common/MdfParser/IOValueList.cpp
   trunk/MgDev/Common/MdfParser/IOValueList.h
   trunk/MgDev/Common/Schema/LayerDefinition-1.1.0.xsd
   trunk/MgDev/Common/Schema/SymbolDefinition-1.0.0.xsd
   trunk/MgDev/Common/Stylization/DWFRenderer.cpp
   trunk/MgDev/Common/Stylization/SE_RenderProxies.h
   trunk/MgDev/Common/Stylization/SE_StyleVisitor.cpp
   trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.cpp
   trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.h
   trunk/MgDev/UnitTest/TestData/Symbology/MdfTestCompTypeStyle.ldf
   trunk/MgDev/UnitTest/TestData/Symbology/MdfTestCompoundSymbol.sd
   trunk/MgDev/UnitTest/TestData/Symbology/MdfTestSimpleSymbol.sd
   trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyLines.ldf
   trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyLinesCrossTick.ldf
   trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyPoints.ldf
   trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyPointsParam.ldf
   trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyRoads.ldf
   trunk/MgDev/UnitTest/TestData/Symbology/symbolp.sd
Log:
Symbolization schema update.  This submission makes the following changes
to the symbolization schema:

* remove invalid enumerations from SymbolInstance::CheckExclusionRegion element
  => it should be a plain xs:string

* change SymbolInstance::SizeContext to be a SizeContextType
  => this is for consistency

* make LineUsage::VertexAngleLimit an xs:string type
  => the type is missing in the schema

* make SymbolInstance::DrawLast an xs:string type
  => the type is missing in the schema

* change all enumerated type properties to plain strings so they support expressions
  => PointUsage::AngleControl
  => LineUsage::AngleControl
  => LineUsage::UnitsControl
  => LineUsage::VertexControl
  => AreaUsage::OriginalControl
  => AreaUsage::AngleControl
  => AreaUsage::ClippingControl
  => Path::LineCap
  => Path::LineJoin
  => GraphicBaseType::ResizeControl
  => ResizeBox::GrowControl

* add a VertexJoin property on LineUsage
  => all graphic elements in the simple symbol use this value to determine their
     wrapping behavior at vertices

* rename Parameter::ValueList to AllowedValues

* rename SimpleSymbol::SimpleSymbolReference to SymbolReference
  => it's already clear enough that this is a SimpleSymbolReference because this
     is part of SimpleSymbol

* switch order of elements in AreaUsage
  => switch AngleControl and OriginControl
  => put Angle before OriginX and OriginY
  => makes AreaUsage more consistent with LineUsage and PointUsage

* change Graphics collection to allow 0 to unbounded elements
  => currently it requires at least one element
  => users want to save their symbols while editing them
  => they may temporarily not contain any graphic elements

* same change for the CompoundSymbolDefinition::SimpleSymbol collection
  => allow 0 to unbounded symbols

* same change for the CompositeSymbolization::SymbolInstance collection
  => allow 0 to unbounded symbol instances

* document the default value for optional elements

* for properties supporting expressions that must evaluate to certain string
  values, document what those values are


Modified: trunk/MgDev/Common/MdfModel/AreaUsage.cpp
===================================================================
--- trunk/MgDev/Common/MdfModel/AreaUsage.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfModel/AreaUsage.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -29,8 +29,6 @@
 //-------------------------------------------------------------------------
 AreaUsage::AreaUsage()
 {
-    // NOTE: if you change any defaults then you must also update
-    //       IOAreaUsage::Write to use the correct default values.
 }
 
 //-------------------------------------------------------------------------
@@ -45,36 +43,36 @@
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-const MdfString& AreaUsage::GetOriginControl() const
+const MdfString& AreaUsage::GetAngleControl() const
 {
-    return this->m_sOriginControl;
+    return this->m_sAngleControl;
 }
 
 //-------------------------------------------------------------------------
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-void AreaUsage::SetOriginControl(const MdfString& originControl)
+void AreaUsage::SetAngleControl(const MdfString& angleControl)
 {
-    this->m_sOriginControl = originControl;
+    this->m_sAngleControl = angleControl;
 }
 
 //-------------------------------------------------------------------------
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-const MdfString& AreaUsage::GetAngleControl() const
+const MdfString& AreaUsage::GetOriginControl() const
 {
-    return this->m_sAngleControl;
+    return this->m_sOriginControl;
 }
 
 //-------------------------------------------------------------------------
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-void AreaUsage::SetAngleControl(const MdfString& angleControl)
+void AreaUsage::SetOriginControl(const MdfString& originControl)
 {
-    this->m_sAngleControl = angleControl;
+    this->m_sOriginControl = originControl;
 }
 
 //-------------------------------------------------------------------------
@@ -99,54 +97,54 @@
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-const MdfString& AreaUsage::GetOriginX() const
+const MdfString& AreaUsage::GetAngle() const
 {
-    return this->m_sOriginX;
+    return this->m_sAngle;
 }
 
 //-------------------------------------------------------------------------
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-void AreaUsage::SetOriginX(const MdfString& originX)
+void AreaUsage::SetAngle(const MdfString& angle)
 {
-    this->m_sOriginX = originX;
+    this->m_sAngle = angle;
 }
 
 //-------------------------------------------------------------------------
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-const MdfString& AreaUsage::GetOriginY() const
+const MdfString& AreaUsage::GetOriginX() const
 {
-    return this->m_sOriginY;
+    return this->m_sOriginX;
 }
 
 //-------------------------------------------------------------------------
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-void AreaUsage::SetOriginY(const MdfString& originY)
+void AreaUsage::SetOriginX(const MdfString& originX)
 {
-    this->m_sOriginY = originY;
+    this->m_sOriginX = originX;
 }
 
 //-------------------------------------------------------------------------
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-const MdfString& AreaUsage::GetAngle() const
+const MdfString& AreaUsage::GetOriginY() const
 {
-    return this->m_sAngle;
+    return this->m_sOriginY;
 }
 
 //-------------------------------------------------------------------------
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-void AreaUsage::SetAngle(const MdfString& angle)
+void AreaUsage::SetOriginY(const MdfString& originY)
 {
-    this->m_sAngle = angle;
+    this->m_sOriginY = originY;
 }
 
 //-------------------------------------------------------------------------

Modified: trunk/MgDev/Common/MdfModel/AreaUsage.h
===================================================================
--- trunk/MgDev/Common/MdfModel/AreaUsage.h	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfModel/AreaUsage.h	2007-03-20 14:04:18 UTC (rev 1296)
@@ -33,24 +33,24 @@
         AreaUsage();
         virtual ~AreaUsage();
 
+        const MdfString& GetAngleControl() const;
+        void SetAngleControl(const MdfString& angleControl);
+
         const MdfString& GetOriginControl() const;
         void SetOriginControl(const MdfString& originControl);
 
-        const MdfString& GetAngleControl() const;
-        void SetAngleControl(const MdfString& angleControl);
-
         const MdfString& GetClippingControl() const;
         void SetClippingControl(const MdfString& clippingControl);
 
+        const MdfString& GetAngle() const;
+        void SetAngle(const MdfString& angle);
+
         const MdfString& GetOriginX() const;
         void SetOriginX(const MdfString& originX);
 
         const MdfString& GetOriginY() const;
         void SetOriginY(const MdfString& originY);
 
-        const MdfString& GetAngle() const;
-        void SetAngle(const MdfString& angle);
-
         const MdfString& GetRepeatX() const;
         void SetRepeatX(const MdfString& repeatX);
 
@@ -66,12 +66,12 @@
         AreaUsage& operator=(const AreaUsage&);
 
         // Data members
+        MdfString m_sAngleControl;
         MdfString m_sOriginControl;
-        MdfString m_sAngleControl;
         MdfString m_sClippingControl;
+        MdfString m_sAngle;
         MdfString m_sOriginX;
         MdfString m_sOriginY;
-        MdfString m_sAngle;
         MdfString m_sRepeatX;
         MdfString m_sRepeatY;
         MdfString m_sBufferWidth;

Modified: trunk/MgDev/Common/MdfModel/GraphicElement.cpp
===================================================================
--- trunk/MgDev/Common/MdfModel/GraphicElement.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfModel/GraphicElement.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -29,9 +29,6 @@
 //-------------------------------------------------------------------------
 GraphicElement::GraphicElement()
 {
-    // NOTE: if you change any defaults then you must also update
-    //       IOGraphicElement::Write to use the correct default values.
-    this->m_eResizeControl = ResizeNone;
 }
 
 //-------------------------------------------------------------------------
@@ -43,21 +40,35 @@
 }
 
 //-------------------------------------------------------------------------
-// PURPOSE: Accessor method for the ResizeControl property.
+// PURPOSE: Accessor method for the ResizeControl property.  The ResizeControl
+//          property specifies how this graphic element interacts with the
+//          resize box.  AddToResizeBox means the element's graphical extent
+//          is added to the resize box, but the element is not resized or
+//          repositioned if the resize box grows.  AdjustToResizeBox means
+//          the element is resized and repositioned relative to the resize
+//          box, but its extent is not added to the box.  ResizeNone, the
+//          default, means the element does not interact with the resize box.
 // RETURNS: The resize control for this graphic element.
 //-------------------------------------------------------------------------
-GraphicElement::ResizeControl GraphicElement::GetResizeControl() const
+const MdfString& GraphicElement::GetResizeControl() const
 {
-    return this->m_eResizeControl;
+    return this->m_sResizeControl;
 }
 
 //-------------------------------------------------------------------------
-// PURPOSE: Accessor method for the ResizeControl property.
+// PURPOSE: Accessor method for the ResizeControl property.  The ResizeControl
+//          property specifies how this graphic element interacts with the
+//          resize box.  AddToResizeBox means the element's graphical extent
+//          is added to the resize box, but the element is not resized or
+//          repositioned if the resize box grows.  AdjustToResizeBox means
+//          the element is resized and repositioned relative to the resize
+//          box, but its extent is not added to the box.  ResizeNone, the
+//          default, means the element does not interact with the resize box.
 // PARAMETERS:
 //      Input:
-//          eResizeControl - The resize control for this graphic element.
+//          resizeControl - The resize control for this graphic element.
 //-------------------------------------------------------------------------
-void GraphicElement::SetResizeControl(GraphicElement::ResizeControl eResizeControl)
+void GraphicElement::SetResizeControl(const MdfString& resizeControl)
 {
-    this->m_eResizeControl = eResizeControl;
+    this->m_sResizeControl = resizeControl;
 }

Modified: trunk/MgDev/Common/MdfModel/GraphicElement.h
===================================================================
--- trunk/MgDev/Common/MdfModel/GraphicElement.h	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfModel/GraphicElement.h	2007-03-20 14:04:18 UTC (rev 1296)
@@ -32,27 +32,13 @@
     class MDFMODEL_API GraphicElement : public MdfRootObject
     {
     public:
-        // The ResizeControl enum specifies how this graphic element interacts
-        // with the resize box.  AddToResizeBox means the element's graphical
-        // extent is added to the resize box, but the element is not resized
-        // or repositioned if the resize box grows.  AdjustToResizeBox means
-        // the element is resized and repositioned relative to the resize box,
-        // but its extent is not added to the box.  ResizeNone, the default,
-        // means the element does not interact with the resize box.
-        enum ResizeControl
-        {
-            ResizeNone,
-            AddToResizeBox,
-            AdjustToResizeBox
-        };
-
         // Destruction
         virtual ~GraphicElement();
 
         // Operations
         // Property : ResizeControl
-        ResizeControl GetResizeControl() const;
-        void SetResizeControl(ResizeControl resizeControl);
+        const MdfString& GetResizeControl() const;
+        void SetResizeControl(const MdfString& resizeControl);
 
         // Visitor Pattern method defined in GraphicElement.
         virtual void AcceptVisitor(IGraphicElementVisitor& igeVisitor) = 0;
@@ -64,7 +50,7 @@
 
     private:
         // Data members
-        ResizeControl m_eResizeControl;
+        MdfString m_sResizeControl;
     };
 
     typedef MdfOwnerCollection<GraphicElement> GraphicElementCollection;

Modified: trunk/MgDev/Common/MdfModel/LineUsage.cpp
===================================================================
--- trunk/MgDev/Common/MdfModel/LineUsage.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfModel/LineUsage.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -30,8 +30,6 @@
 //-------------------------------------------------------------------------
 LineUsage::LineUsage()
 {
-    // NOTE: if you change any defaults then you must also update
-    //       IOLineUsage::Write to use the correct default values.
     this->m_pDefaultPath = NULL;
 }
 
@@ -193,6 +191,24 @@
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
+const MdfString& LineUsage::GetVertexJoin() const
+{
+    return this->m_sVertexJoin;
+}
+
+//-------------------------------------------------------------------------
+// PURPOSE:
+// PARAMETERS:
+//-------------------------------------------------------------------------
+void LineUsage::SetVertexJoin(const MdfString& vertexJoin)
+{
+    this->m_sVertexJoin = vertexJoin;
+}
+
+//-------------------------------------------------------------------------
+// PURPOSE:
+// PARAMETERS:
+//-------------------------------------------------------------------------
 Path* LineUsage::GetDefaultPath()
 {
     return this->m_pDefaultPath;

Modified: trunk/MgDev/Common/MdfModel/LineUsage.h
===================================================================
--- trunk/MgDev/Common/MdfModel/LineUsage.h	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfModel/LineUsage.h	2007-03-20 14:04:18 UTC (rev 1296)
@@ -58,6 +58,9 @@
         const MdfString& GetVertexAngleLimit() const;
         void SetVertexAngleLimit(const MdfString& vertexAngleLimit);
 
+        const MdfString& GetVertexJoin() const;
+        void SetVertexJoin(const MdfString& vertexJoin);
+
         Path* GetDefaultPath();
         void AdoptDefaultPath(Path* defaultPath);
         Path* OrphanDefaultPath();
@@ -76,6 +79,7 @@
         MdfString m_sEndOffset;
         MdfString m_sRepeat;
         MdfString m_sVertexAngleLimit;
+        MdfString m_sVertexJoin;
 
         Path* m_pDefaultPath;
     };

Modified: trunk/MgDev/Common/MdfModel/Parameter.cpp
===================================================================
--- trunk/MgDev/Common/MdfModel/Parameter.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfModel/Parameter.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -115,7 +115,7 @@
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-ValueList* Parameter::GetValueList()
+ValueList* Parameter::GetAllowedValues()
 {
-    return &this->m_collValueList;
+    return &this->m_collAllowedValues;
 }

Modified: trunk/MgDev/Common/MdfModel/Parameter.h
===================================================================
--- trunk/MgDev/Common/MdfModel/Parameter.h	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfModel/Parameter.h	2007-03-20 14:04:18 UTC (rev 1296)
@@ -49,7 +49,7 @@
         const MdfString& GetDescription() const;
         void SetDescription(const MdfString& description);
 
-        ValueList* GetValueList();
+        ValueList* GetAllowedValues();
 
     private:
         // Hidden copy constructor and assignment operator.
@@ -61,7 +61,7 @@
         MdfString m_sDefaultValue;
         MdfString m_sDisplayName;
         MdfString m_sDescription;
-        ValueList m_collValueList;
+        ValueList m_collAllowedValues;
     };
 
     typedef MdfOwnerCollection<Parameter> ParameterCollection;

Modified: trunk/MgDev/Common/MdfModel/Path.cpp
===================================================================
--- trunk/MgDev/Common/MdfModel/Path.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfModel/Path.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -30,10 +30,6 @@
 //-------------------------------------------------------------------------
 Path::Path()
 {
-    // NOTE: if you change any defaults then you must also update
-    //       IOPath::Write to use the correct default values.
-    this->m_eLineCap = CapRound;
-    this->m_eLineJoin = JoinRound;
 }
 
 //-------------------------------------------------------------------------
@@ -138,36 +134,36 @@
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-Path::LineCap Path::GetLineCap() const
+const MdfString& Path::GetLineCap() const
 {
-    return m_eLineCap;
+    return m_sLineCap;
 }
 
 //-------------------------------------------------------------------------
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-void Path::SetLineCap(LineCap lineCap)
+void Path::SetLineCap(const MdfString& lineCap)
 {
-    m_eLineCap = lineCap;
+    m_sLineCap = lineCap;
 }
 
 //-------------------------------------------------------------------------
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-Path::LineJoin Path::GetLineJoin() const
+const MdfString& Path::GetLineJoin() const
 {
-    return m_eLineJoin;
+    return m_sLineJoin;
 }
 
 //-------------------------------------------------------------------------
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-void Path::SetLineJoin(LineJoin lineJoin)
+void Path::SetLineJoin(const MdfString& lineJoin)
 {
-    m_eLineJoin = lineJoin;
+    m_sLineJoin = lineJoin;
 }
 
 //-------------------------------------------------------------------------

Modified: trunk/MgDev/Common/MdfModel/Path.h
===================================================================
--- trunk/MgDev/Common/MdfModel/Path.h	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfModel/Path.h	2007-03-20 14:04:18 UTC (rev 1296)
@@ -29,22 +29,6 @@
     class MDFMODEL_API Path : public GraphicElement
     {
     public:
-        enum LineCap
-        {
-            CapNone,
-            CapRound,
-            CapTriangle,
-            CapSquare
-        };
-
-        enum LineJoin
-        {
-            JoinNone,
-            JoinBevel,
-            JoinRound,
-            JoinMiter
-        };
-
         // Construction, destruction, initialization
         Path();
         virtual ~Path();
@@ -61,17 +45,14 @@
         const MdfString& GetLineWeight() const;
         void SetLineWeight(const MdfString& lineWeight);
 
-        // TODO: WCW - should this be a boolean property?
         const MdfString& GetLineWeightScalable() const;
         void SetLineWeightScalable(const MdfString& lineWeightScalable);
 
-        // TODO: WCW - should this be a string property?
-        LineCap GetLineCap() const;
-        void SetLineCap(LineCap lineCap);
+        const MdfString& GetLineCap() const;
+        void SetLineCap(const MdfString& lineCap);
 
-        // TODO: WCW - should this be a string property?
-        LineJoin GetLineJoin() const;
-        void SetLineJoin(LineJoin lineJoin);
+        const MdfString& GetLineJoin() const;
+        void SetLineJoin(const MdfString& lineJoin);
 
         const MdfString& GetLineMiterLimit() const;
         void SetLineMiterLimit(const MdfString& lineMiterLimit);
@@ -85,14 +66,12 @@
 
         // Data members
         MdfString m_sGeometry;
-
         MdfString m_sFillColor;
         MdfString m_sLineColor;
         MdfString m_sLineWeight;
         MdfString m_sLineWeightScalable;
-
-        LineCap m_eLineCap;
-        LineJoin m_eLineJoin;
+        MdfString m_sLineCap;
+        MdfString m_sLineJoin;
         MdfString m_sLineMiterLimit;
     };
 

Modified: trunk/MgDev/Common/MdfModel/PointUsage.cpp
===================================================================
--- trunk/MgDev/Common/MdfModel/PointUsage.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfModel/PointUsage.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -29,8 +29,6 @@
 //-------------------------------------------------------------------------
 PointUsage::PointUsage()
 {
-    // NOTE: if you change any defaults then you must also update
-    //       IOPointUsage::Write to use the correct default values.
 }
 
 //-------------------------------------------------------------------------

Modified: trunk/MgDev/Common/MdfModel/ResizeBox.cpp
===================================================================
--- trunk/MgDev/Common/MdfModel/ResizeBox.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfModel/ResizeBox.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -29,9 +29,6 @@
 //-------------------------------------------------------------------------
 ResizeBox::ResizeBox()
 {
-    // NOTE: if you change any defaults then you must also update
-    //       IOResizeBox::Write to use the correct default values.
-    this->m_eGrowControl = GrowInXYMaintainAspect;
 }
 
 //-------------------------------------------------------------------------
@@ -118,16 +115,16 @@
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-ResizeBox::GrowControl ResizeBox::GetGrowControl() const
+const MdfString& ResizeBox::GetGrowControl() const
 {
-    return this->m_eGrowControl;
+    return this->m_sGrowControl;
 }
 
 //-------------------------------------------------------------------------
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
-void ResizeBox::SetGrowControl(GrowControl growControl)
+void ResizeBox::SetGrowControl(const MdfString& growControl)
 {
-    this->m_eGrowControl = growControl;
+    this->m_sGrowControl = growControl;
 }

Modified: trunk/MgDev/Common/MdfModel/ResizeBox.h
===================================================================
--- trunk/MgDev/Common/MdfModel/ResizeBox.h	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfModel/ResizeBox.h	2007-03-20 14:04:18 UTC (rev 1296)
@@ -29,14 +29,6 @@
     class MDFMODEL_API ResizeBox : public MdfRootObject
     {
     public:
-        enum GrowControl
-        {
-            GrowInX,
-            GrowInY,
-            GrowInXY,
-            GrowInXYMaintainAspect
-        };
-
         // Construction, destruction, initialization
         ResizeBox();
         virtual ~ResizeBox();
@@ -53,8 +45,8 @@
         const MdfString& GetSizeY() const;
         void SetSizeY(const MdfString& sizeY);
 
-        GrowControl GetGrowControl() const;
-        void SetGrowControl(GrowControl growControl);
+        const MdfString& GetGrowControl() const;
+        void SetGrowControl(const MdfString& growControl);
 
     private:
         // Hidden copy constructor and assignment operator.
@@ -66,7 +58,7 @@
         MdfString m_sPositionY;
         MdfString m_sSizeX;
         MdfString m_sSizeY;
-        GrowControl m_eGrowControl;
+        MdfString m_sGrowControl;
     };
 
 END_NAMESPACE_MDFMODEL

Modified: trunk/MgDev/Common/MdfModel/SymbolInstance.h
===================================================================
--- trunk/MgDev/Common/MdfModel/SymbolInstance.h	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfModel/SymbolInstance.h	2007-03-20 14:04:18 UTC (rev 1296)
@@ -58,15 +58,12 @@
         SizeContext GetSizeContext() const;
         void SetSizeContext(SizeContext sizeContext);
 
-        // TODO: WCW - should this be a boolean property?
         const MdfString& GetDrawLast() const;
         void SetDrawLast(const MdfString& drawLast);
 
-        // TODO: WCW - should this be a boolean property?
         const MdfString& GetCheckExclusionRegion() const;
         void SetCheckExclusionRegion(const MdfString& checkExclusionRegion);
 
-        // TODO: WCW - should this be a boolean property?
         const MdfString& GetAddToExclusionRegion() const;
         void SetAddToExclusionRegion(const MdfString& addToExclusionRegion);
 

Modified: trunk/MgDev/Common/MdfParser/IOAreaUsage.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOAreaUsage.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfParser/IOAreaUsage.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -40,12 +40,12 @@
 
 void IOAreaUsage::ElementChars(const wchar_t *ch)
 {
-         IF_STRING_PROPERTY(m_currElemName, this->_areaUsage, OriginControl, ch)
-    else IF_STRING_PROPERTY(m_currElemName, this->_areaUsage, AngleControl, ch)
+         IF_STRING_PROPERTY(m_currElemName, this->_areaUsage, AngleControl, ch)
+    else IF_STRING_PROPERTY(m_currElemName, this->_areaUsage, OriginControl, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_areaUsage, ClippingControl, ch)
+    else IF_STRING_PROPERTY(m_currElemName, this->_areaUsage, Angle, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_areaUsage, OriginX, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_areaUsage, OriginY, ch)
-    else IF_STRING_PROPERTY(m_currElemName, this->_areaUsage, Angle, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_areaUsage, RepeatX, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_areaUsage, RepeatY, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_areaUsage, BufferWidth, ch)
@@ -69,12 +69,12 @@
     fd << tab() << "<AreaUsage>" << std::endl; // NOXLATE
     inctab();
 
+    EMIT_STRING_PROPERTY(fd, usage, AngleControl, true);
     EMIT_STRING_PROPERTY(fd, usage, OriginControl, true);
-    EMIT_STRING_PROPERTY(fd, usage, AngleControl, true);
     EMIT_STRING_PROPERTY(fd, usage, ClippingControl, true);
+    EMIT_STRING_PROPERTY(fd, usage, Angle, true)
     EMIT_STRING_PROPERTY(fd, usage, OriginX, true)
     EMIT_STRING_PROPERTY(fd, usage, OriginY, true)
-    EMIT_STRING_PROPERTY(fd, usage, Angle, true)
     EMIT_STRING_PROPERTY(fd, usage, RepeatX, true)
     EMIT_STRING_PROPERTY(fd, usage, RepeatY, true)
     EMIT_STRING_PROPERTY(fd, usage, BufferWidth, true)

Modified: trunk/MgDev/Common/MdfParser/IOCompoundSymbolDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOCompoundSymbolDefinition.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfParser/IOCompoundSymbolDefinition.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -62,11 +62,7 @@
 
 void IOCompoundSymbolDefinition::Write(MdfStream &fd, CompoundSymbolDefinition* symbolDefinition)
 {
-    // the schema currently requires at least one symbol
-    // TODO: WCW - we should relax this to allow zero symbols
     SimpleSymbolCollection* symbolCollection = symbolDefinition->GetSymbols();
-    int numElements = symbolCollection->GetCount();
-    assert(numElements > 0);
 
     fd << tab() << "<CompoundSymbolDefinition>" << std::endl; // NOXLATE
     inctab();
@@ -74,6 +70,7 @@
     EMIT_STRING_PROPERTY(fd, symbolDefinition, Name, false)
     EMIT_STRING_PROPERTY(fd, symbolDefinition, Description, true)
 
+    int numElements = symbolCollection->GetCount();
     for (int i=0; i<numElements; ++i)
         IOSimpleSymbol::Write(fd, symbolCollection->GetAt(i));
 

Modified: trunk/MgDev/Common/MdfParser/IOGraphicElement.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOGraphicElement.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfParser/IOGraphicElement.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -33,7 +33,7 @@
 
 void IOGraphicElement::ElementChars(const wchar_t *ch)
 {
-    IF_ENUM_3(m_currElemName, this->_element, GraphicElement, ResizeControl, ch, ResizeNone, AddToResizeBox, AdjustToResizeBox)
+    IF_STRING_PROPERTY(m_currElemName, this->_element, ResizeControl, ch)
 }
 
 void IOGraphicElement::EndElement(const wchar_t *name, HandlerStack *handlerStack)
@@ -49,5 +49,5 @@
 
 void IOGraphicElement::Write(MdfStream &fd, GraphicElement* element)
 {
-    EMIT_ENUM_3(fd, element, GraphicElement, ResizeControl, ResizeNone, AddToResizeBox, AdjustToResizeBox, 1)   // ResizeNone is default
+    EMIT_STRING_PROPERTY(fd, element, ResizeControl, true)
 }

Modified: trunk/MgDev/Common/MdfParser/IOGraphicElementCollection.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOGraphicElementCollection.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfParser/IOGraphicElementCollection.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -86,14 +86,10 @@
 
 void IOGraphicElementCollection::Write(MdfStream &fd, GraphicElementCollection* elementCollection)
 {
-    // the schema currently requires at least one element
-    // TODO: WCW - we should relax this to allow zero elements
-    int numElements = elementCollection->GetCount();
-    assert(numElements > 0);
-
     fd << tab() << "<Graphics>" << std::endl; // NOXLATE
     inctab();
 
+    int numElements = elementCollection->GetCount();
     for (int i=0; i<numElements; ++i)
     {
         GraphicElement* elem = elementCollection->GetAt(i);

Modified: trunk/MgDev/Common/MdfParser/IOLineUsage.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOLineUsage.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfParser/IOLineUsage.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -57,6 +57,7 @@
     else IF_STRING_PROPERTY(m_currElemName, this->_lineUsage, EndOffset, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_lineUsage, Repeat, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_lineUsage, VertexAngleLimit, ch)
+    else IF_STRING_PROPERTY(m_currElemName, this->_lineUsage, VertexJoin, ch)
 }
 
 void IOLineUsage::EndElement(const wchar_t *name, HandlerStack *handlerStack)
@@ -85,6 +86,7 @@
     EMIT_STRING_PROPERTY(fd, lineUsage, EndOffset, true)
     EMIT_STRING_PROPERTY(fd, lineUsage, Repeat, true)
     EMIT_STRING_PROPERTY(fd, lineUsage, VertexAngleLimit, true)
+    EMIT_STRING_PROPERTY(fd, lineUsage, VertexJoin, true)
 
     if (lineUsage->GetDefaultPath() != NULL)
         IOPath::Write(fd, lineUsage->GetDefaultPath(), "DefaultPath");

Modified: trunk/MgDev/Common/MdfParser/IOParameter.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOParameter.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfParser/IOParameter.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -41,11 +41,11 @@
         m_startElemName = name;
         this->_parameter = new Parameter();
     }
-    else if (m_currElemName == L"ValueList") // NOXLATE
+    else if (m_currElemName == L"AllowedValues") // NOXLATE
     {
-        IOValueList* IO = new IOValueList(this->_parameter->GetValueList());
+        IOValueList* IO = new IOValueList(this->_parameter->GetAllowedValues());
         handlerStack->push(IO);
-        IO->StartElement(name, handlerStack);
+        IO->StartValueListElement(name, handlerStack);
     }
 }
 
@@ -80,7 +80,7 @@
     EMIT_STRING_PROPERTY(fd, parameter, DisplayName, true)
     EMIT_STRING_PROPERTY(fd, parameter, Description, true)
 
-    IOValueList::Write(fd, parameter->GetValueList());
+    IOValueList::Write(fd, parameter->GetAllowedValues(), "AllowedValues");
 
     dectab();
     fd << tab() << "</Parameter>" << std::endl; // NOXLATE

Modified: trunk/MgDev/Common/MdfParser/IOPath.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOPath.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfParser/IOPath.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -47,33 +47,9 @@
     else IF_STRING_PROPERTY(m_currElemName, path, LineColor, ch)
     else IF_STRING_PROPERTY(m_currElemName, path, LineWeight, ch)
     else IF_STRING_PROPERTY(m_currElemName, path, LineWeightScalable, ch)
+    else IF_STRING_PROPERTY(m_currElemName, path, LineCap, ch)
+    else IF_STRING_PROPERTY(m_currElemName, path, LineJoin, ch)
     else IF_STRING_PROPERTY(m_currElemName, path, LineMiterLimit, ch)
-// can't use IF_ENUM_4 since the allowed values don't exactly match the enums
-//  else IF_ENUM_4(m_currElemName, path, Path, LineCap, ch, CapNone, CapRound, CapTriangle, CapSquare)
-//  else IF_ENUM_4(m_currElemName, path, Path, LineJoin, ch, JoinNone, JoinBevel, JoinRound, JoinMiter)
-    else if (m_currElemName == L"LineCap") // NOXLATE
-    {
-        if      (::wcscmp(ch, L"None") == 0) // NOXLATE
-            path->SetLineCap(Path::CapNone);
-        else if (::wcscmp(ch, L"Round") == 0) // NOXLATE
-            path->SetLineCap(Path::CapRound);
-        else if (::wcscmp(ch, L"Triangle") == 0) // NOXLATE
-            path->SetLineCap(Path::CapTriangle);
-        else if (::wcscmp(ch, L"Square") == 0) // NOXLATE
-            path->SetLineCap(Path::CapSquare);
-    }
-    else if (m_currElemName == L"LineJoin")
-    {
-        // can't use IF_ENUM_4 since the allowed values don't exactly match the enums
-        if      (::wcscmp(ch, L"None") == 0) // NOXLATE
-            path->SetLineJoin(Path::JoinNone);
-        else if (::wcscmp(ch, L"Bevel") == 0) // NOXLATE
-            path->SetLineJoin(Path::JoinBevel);
-        else if (::wcscmp(ch, L"Round") == 0) // NOXLATE
-            path->SetLineJoin(Path::JoinRound);
-        else if (::wcscmp(ch, L"Miter") == 0) // NOXLATE
-            path->SetLineJoin(Path::JoinMiter);
-    }
     else IOGraphicElement::ElementChars(ch);
 }
 
@@ -94,49 +70,8 @@
     EMIT_STRING_PROPERTY(fd, path, LineColor, true)
     EMIT_STRING_PROPERTY(fd, path, LineWeight, true)
     EMIT_STRING_PROPERTY(fd, path, LineWeightScalable, true)
-// can't use EMIT_ENUM_4 since the allowed values don't exactly match the enums
-//  EMIT_ENUM_4(fd, path, Path, LineCap, CapNone, CapRound, CapTriangle, CapSquare, 2) // CapRound is default
-//  EMIT_ENUM_4(fd, path, Path, LineJoin, JoinNone, JoinBevel, JoinRound, JoinMiter, 3) // JoinRound is default
-    if (path->GetLineCap() != Path::CapRound)
-    {
-        fd << tab() << "<LineCap>"; // NOXLATE
-        switch (path->GetLineCap())
-        {
-        case Path::CapNone:
-            fd << "None"; // NOXLATE
-            break;
-        case Path::CapRound:
-            fd << "Round"; // NOXLATE
-            break;
-        case Path::CapTriangle:
-            fd << "Triangle"; // NOXLATE
-            break;
-        case Path::CapSquare:
-            fd << "Square"; // NOXLATE
-            break;
-        }
-        fd << "</LineCap>" << std::endl; // NOXLATE
-    }
-    if (path->GetLineJoin() != Path::JoinRound)
-    {
-        fd << tab() << "<LineJoin>"; // NOXLATE
-        switch (path->GetLineJoin())
-        {
-        case Path::JoinNone:
-            fd << "None"; // NOXLATE
-            break;
-        case Path::JoinBevel:
-            fd << "Bevel"; // NOXLATE
-            break;
-        case Path::JoinRound:
-            fd << "Round"; // NOXLATE
-            break;
-        case Path::JoinMiter:
-            fd << "Miter"; // NOXLATE
-            break;
-        }
-        fd << "</LineJoin>" << std::endl; // NOXLATE
-    }
+    EMIT_STRING_PROPERTY(fd, path, LineCap, true)
+    EMIT_STRING_PROPERTY(fd, path, LineJoin, true)
     EMIT_STRING_PROPERTY(fd, path, LineMiterLimit, true)
 
     dectab();

Modified: trunk/MgDev/Common/MdfParser/IOResizeBox.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOResizeBox.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfParser/IOResizeBox.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -48,7 +48,7 @@
     else IF_STRING_PROPERTY(m_currElemName, this->_resizeBox, PositionY, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_resizeBox, SizeX, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_resizeBox, SizeY, ch)
-    else IF_ENUM_4(m_currElemName, this->_resizeBox, ResizeBox, GrowControl, ch, GrowInX, GrowInY, GrowInXY, GrowInXYMaintainAspect);
+    else IF_STRING_PROPERTY(m_currElemName, this->_resizeBox, GrowControl, ch)
 }
 
 void IOResizeBox::EndElement(const wchar_t *name, HandlerStack *handlerStack)
@@ -73,7 +73,7 @@
     EMIT_STRING_PROPERTY(fd, resizeBox, PositionY, false)
     EMIT_STRING_PROPERTY(fd, resizeBox, SizeX, false)
     EMIT_STRING_PROPERTY(fd, resizeBox, SizeY, false)
-    EMIT_ENUM_4(fd, resizeBox, ResizeBox, GrowControl, GrowInX, GrowInY, GrowInXY, GrowInXYMaintainAspect, 0)
+    EMIT_STRING_PROPERTY(fd, resizeBox, GrowControl, false)
 
     dectab();
     fd << tab() << "</ResizeBox>" << std::endl; // NOXLATE

Modified: trunk/MgDev/Common/MdfParser/IOSimpleSymbol.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOSimpleSymbol.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfParser/IOSimpleSymbol.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -49,10 +49,7 @@
 
 void IOSimpleSymbol::ElementChars(const wchar_t *ch)
 {
-// can't use IF_STRING_PROPERTY since the property name doesn't exactly match the element name
-//       IF_STRING_PROPERTY(m_currElemName, this->_simpleSymbol, SymbolReference, ch)
-    if (m_currElemName == L"SimpleSymbolReference") // NOXLATE
-        this->_simpleSymbol->SetSymbolReference(ch);
+         IF_STRING_PROPERTY(m_currElemName, this->_simpleSymbol, SymbolReference, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_simpleSymbol, RenderingPass, ch)
 }
 
@@ -79,11 +76,7 @@
         IOSimpleSymbolDefinition::Write(fd, simpleSymbol->GetSymbolDefinition());
     else
     {
-// can't use EMIT_STRING_PROPERTY since the property name doesn't exactly match the element name
-//      EMIT_STRING_PROPERTY(fd, simpleSymbol, SymbolReference, false)
-        fd << tab() << "<SimpleSymbolReference>"; // NOXLATE
-        fd << EncodeString(simpleSymbol->GetSymbolReference());
-        fd << "</SimpleSymbolReference>" << std::endl; // NOXLATE
+        EMIT_STRING_PROPERTY(fd, simpleSymbol, SymbolReference, false)
     }
 
     EMIT_STRING_PROPERTY(fd, simpleSymbol, RenderingPass, true)

Modified: trunk/MgDev/Common/MdfParser/IOStroke.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOStroke.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfParser/IOStroke.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -109,7 +109,7 @@
 
 void IOStroke::Write(MdfStream &fd, Stroke *stroke, std::string name, Version *version)
 {
-    fd << tab() << "<" << name << ">" << std::endl; // NOXLATE
+    fd << tab() << "<" << name << ">" << std::endl;
     inctab();
 
     //Property: LineStyle
@@ -156,5 +156,5 @@
     }
 
     dectab();
-    fd << tab() << "</" << name << ">" << std::endl; // NOXLATE
+    fd << tab() << "</" << name << ">" << std::endl;
 }

Modified: trunk/MgDev/Common/MdfParser/IOSymbolInstance.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOSymbolInstance.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfParser/IOSymbolInstance.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -51,15 +51,7 @@
     else IF_STRING_PROPERTY(m_currElemName, this->_symbolInstance, ScaleY, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_symbolInstance, InsertionOffsetX, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_symbolInstance, InsertionOffsetY, ch)
-// can't use IF_ENUM_2 since the allowed values don't exactly match the enums
-//  else IF_ENUM_2(m_currElemName, this->_symbolInstance, MdfModel, SizeContext, ch, DeviceUnits, MappingUnits)
-    else if (m_currElemName == L"SizeContext") // NOXLATE
-    {
-        if      (::wcscmp(ch, L"Device") == 0) // NOXLATE
-            this->_symbolInstance->SetSizeContext(MdfModel::DeviceUnits);
-        else if (::wcscmp(ch, L"Mapping") == 0) // NOXLATE
-            this->_symbolInstance->SetSizeContext(MdfModel::MappingUnits);
-    }
+    else IF_ENUM_2(m_currElemName, this->_symbolInstance, MdfModel, SizeContext, ch, DeviceUnits, MappingUnits)
     else IF_STRING_PROPERTY(m_currElemName, this->_symbolInstance, DrawLast, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_symbolInstance, CheckExclusionRegion, ch)
     else IF_STRING_PROPERTY(m_currElemName, this->_symbolInstance, AddToExclusionRegion, ch)
@@ -96,22 +88,7 @@
     EMIT_STRING_PROPERTY(fd, symbolInstance, ScaleY, true)
     EMIT_STRING_PROPERTY(fd, symbolInstance, InsertionOffsetX, true)
     EMIT_STRING_PROPERTY(fd, symbolInstance, InsertionOffsetY, true)
-// can't use EMIT_ENUM_2 since the allowed values don't exactly match the enums
-//  EMIT_ENUM_2(fd, symbolInstance, MdfModel, SizeContext, DeviceUnits, MappingUnits, 1) // DeviceUnits is default
-    if (symbolInstance->GetSizeContext() != MdfModel::DeviceUnits)
-    {
-        fd << tab() << "<SizeContext>"; // NOXLATE
-        switch (symbolInstance->GetSizeContext())
-        {
-        case MdfModel::DeviceUnits:
-            fd << "Device"; // NOXLATE
-            break;
-        case MdfModel::MappingUnits:
-            fd << "Mapping"; // NOXLATE
-            break;
-        }
-        fd << "</SizeContext>" << std::endl; // NOXLATE
-    }
+    EMIT_ENUM_2(fd, symbolInstance, MdfModel, SizeContext, DeviceUnits, MappingUnits, 1) // DeviceUnits is default
     EMIT_STRING_PROPERTY(fd, symbolInstance, DrawLast, true)
     EMIT_STRING_PROPERTY(fd, symbolInstance, CheckExclusionRegion, true)
     EMIT_STRING_PROPERTY(fd, symbolInstance, AddToExclusionRegion, true)

Modified: trunk/MgDev/Common/MdfParser/IOSymbolInstanceCollection.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOSymbolInstanceCollection.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfParser/IOSymbolInstanceCollection.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -60,14 +60,10 @@
 
 void IOSymbolInstanceCollection::Write(MdfStream &fd, SymbolInstanceCollection* instanceCollection)
 {
-    // the schema currently requires at least one instance
-    // TODO: WCW - we should relax this to allow zero instances
-    int numInstances = instanceCollection->GetCount();
-    assert(numInstances > 0);
-
     fd << tab() << "<SymbolCollection>" << std::endl; // NOXLATE
     inctab();
 
+    int numInstances = instanceCollection->GetCount();
     for (int i=0; i<numInstances; ++i)
     {
         SymbolInstance* instance = instanceCollection->GetAt(i);

Modified: trunk/MgDev/Common/MdfParser/IOValueList.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOValueList.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfParser/IOValueList.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -27,14 +27,16 @@
     this->_valueList = valueList;
 }
 
+void IOValueList::StartValueListElement(const wchar_t *name, HandlerStack *handlerStack)
+{
+    // the element is a value list with the supplied name
+    m_currElemName = name;
+    m_startElemName = name;
+}
+
 void IOValueList::StartElement(const wchar_t *name, HandlerStack *handlerStack)
 {
     m_currElemName = name;
-
-    if (m_currElemName == L"ValueList") // NOXLATE
-    {
-        m_startElemName = name;
-    }
 }
 
 void IOValueList::ElementChars(const wchar_t *ch)
@@ -55,14 +57,14 @@
     }
 }
 
-void IOValueList::Write(MdfStream &fd, ValueList* valueList)
+void IOValueList::Write(MdfStream &fd, ValueList* valueList, std::string name)
 {
     // don't output the list if it's empty - the schema requires this
     int numElements = valueList->GetCount();
     if (numElements == 0)
         return;
 
-    fd << tab() << "<ValueList>" << std::endl; // NOXLATE
+    fd << tab() << "<" << name << ">" << std::endl;
     inctab();
 
     for (int i=0; i<numElements; ++i)
@@ -72,5 +74,5 @@
     }
 
     dectab();
-    fd << tab() << "</ValueList>" << std::endl; // NOXLATE
+    fd << tab() << "</" << name << ">" << std::endl;
 }

Modified: trunk/MgDev/Common/MdfParser/IOValueList.h
===================================================================
--- trunk/MgDev/Common/MdfParser/IOValueList.h	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/MdfParser/IOValueList.h	2007-03-20 14:04:18 UTC (rev 1296)
@@ -31,11 +31,13 @@
     public:
         IOValueList(ValueList* valueList);
 
+        void StartValueListElement(const wchar_t *name, HandlerStack *handlerStack);
+
         virtual void StartElement(const wchar_t *name, HandlerStack *handlerStack);
         virtual void ElementChars(const wchar_t *ch);
         virtual void EndElement(const wchar_t *name, HandlerStack *handlerStack);
 
-        static void Write(MdfStream &fd, ValueList* valueList);
+        static void Write(MdfStream &fd, ValueList* valueList, std::string name);
 
     private:
         ValueList* _valueList;

Modified: trunk/MgDev/Common/Schema/LayerDefinition-1.1.0.xsd
===================================================================
--- trunk/MgDev/Common/Schema/LayerDefinition-1.1.0.xsd	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/Schema/LayerDefinition-1.1.0.xsd	2007-03-20 14:04:18 UTC (rev 1296)
@@ -196,26 +196,26 @@
           </xs:annotation>
         </xs:element>
       </xs:choice>
-      <xs:element name="ElevationSettings" type="ElevationSettingsType" minOccurs="0" />
+      <xs:element name="ElevationSettings" type="ElevationSettingsType" minOccurs="0"/>
       <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="ElevationSettingsType">
     <xs:sequence>
-        <xs:element name="ZOffset" type="xs:string" minOccurs="0" />
-        <xs:element name="ZExtrusion" type="xs:string" minOccurs="0" />
-        <xs:element name="ZOffsetType" type="ElevationTypeType" minOccurs="0" />
-        <xs:element name="Unit" type="LengthUnitType" minOccurs="0"/>
-        <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+      <xs:element name="ZOffset" type="xs:string" minOccurs="0"/>
+      <xs:element name="ZExtrusion" type="xs:string" minOccurs="0"/>
+      <xs:element name="ZOffsetType" type="ElevationTypeType" minOccurs="0"/>
+      <xs:element name="Unit" type="LengthUnitType" minOccurs="0"/>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
     </xs:sequence>
   </xs:complexType>
   <xs:simpleType name="ElevationTypeType">
     <xs:annotation>
-        <xs:documentation>The possible interpretations of a z offset value.</xs:documentation>
+      <xs:documentation>The possible interpretations of a z offset value.</xs:documentation>
     </xs:annotation>
     <xs:restriction base="xs:string">
-        <xs:enumeration value="RelativeToGround"/>
-        <xs:enumeration value="Absolute"/>
+      <xs:enumeration value="RelativeToGround"/>
+      <xs:enumeration value="Absolute"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:complexType name="PointTypeStyleType">
@@ -832,9 +832,12 @@
     </xs:annotation>
     <xs:sequence>
       <xs:element name="SymbolCollection">
+        <xs:annotation>
+          <xs:documentation>The collection of symbols used for stylization.</xs:documentation>
+        </xs:annotation>
         <xs:complexType>
           <xs:sequence>
-            <xs:element name="SymbolInstance" type="SymbolInstanceType" maxOccurs="unbounded"/>
+            <xs:element name="SymbolInstance" type="SymbolInstanceType" minOccurs="0" maxOccurs="unbounded"/>
           </xs:sequence>
         </xs:complexType>
       </xs:element>
@@ -904,30 +907,24 @@
           <xs:documentation>Specifies the additional amount to offset the symbol vertically, in mm in device units, after rotation and scaling have been applied.  Applies only to point symbols.</xs:documentation>
         </xs:annotation>
       </xs:element>
-      <xs:element name="SizeContext" minOccurs="0">
+      <xs:element name="SizeContext" type="SizeContextType" minOccurs="0">
         <xs:annotation>
-          <xs:documentation>Specifies whether the symbol sizes are with respect to the map or the user's display device.  This must evaluate to either MappingUnits or DeviceUnits.</xs:documentation>
+          <xs:documentation>Specifies whether the symbol sizes are with respect to the map or the user's display device.  Defaults to device units.</xs:documentation>
         </xs:annotation>
-        <xs:simpleType>
-          <xs:restriction base="xs:string">
-            <xs:enumeration value="Device"/>
-            <xs:enumeration value="Mapping"/>
-          </xs:restriction>
-        </xs:simpleType>
       </xs:element>
-      <xs:element name="DrawLast" minOccurs="0">
+      <xs:element name="DrawLast" type="xs:string" minOccurs="0">
         <xs:annotation>
-          <xs:documentation>Boolean value which specifies whether the symbol is drawn as part of a final rendering pass (e.g. for labeling).  Defaults to false.</xs:documentation>
+          <xs:documentation>Boolean value which specifies whether the symbol is drawn as part of a final rendering pass (e.g. for labeling).  This must evaluate to True or False (default).</xs:documentation>
         </xs:annotation>
       </xs:element>
       <xs:element name="CheckExclusionRegion" type="xs:string" minOccurs="0">
         <xs:annotation>
-          <xs:documentation>Boolean value which specifies whether to render this symbol only if its graphical extent does not overlap the exclusion region.  Defaults to false.  If the positioning algorithm generates multiple candidate symbol positions and this setting is true, then only the first non-overlapping candidate is rendered.</xs:documentation>
+          <xs:documentation>Boolean value which specifies whether to render this symbol only if its graphical extent does not overlap the exclusion region.  If the positioning algorithm generates multiple candidate symbol positions and this setting is True, then only the first non-overlapping candidate is rendered.  This must evaluate to True or False (default).</xs:documentation>
         </xs:annotation>
       </xs:element>
       <xs:element name="AddToExclusionRegion" type="xs:string" minOccurs="0">
         <xs:annotation>
-          <xs:documentation>Boolean value which specifies whether the graphical extent for this symbol instance is added to the exclusion region (if it is rendered).  Symbols which check the exclusion region will not draw on top of this symbol.  Defaults to false.</xs:documentation>
+          <xs:documentation>Boolean value which specifies whether the graphical extent for this symbol instance is added to the exclusion region (if it is rendered).  Symbols which check the exclusion region will not draw on top of this symbol.  This must evaluate to True or False (default).</xs:documentation>
         </xs:annotation>
       </xs:element>
       <xs:element name="PositioningAlgorithm" type="xs:string" minOccurs="0">

Modified: trunk/MgDev/Common/Schema/SymbolDefinition-1.0.0.xsd
===================================================================
--- trunk/MgDev/Common/Schema/SymbolDefinition-1.0.0.xsd	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/Schema/SymbolDefinition-1.0.0.xsd	2007-03-20 14:04:18 UTC (rev 1296)
@@ -43,7 +43,7 @@
               <xs:documentation>The collection of graphic elements defining this symbol.</xs:documentation>
             </xs:annotation>
             <xs:complexType>
-              <xs:choice maxOccurs="unbounded">
+              <xs:choice minOccurs="0" maxOccurs="unbounded">
                 <xs:element name="Path" type="PathType"/>
                 <xs:element name="Image" type="ImageType"/>
                 <xs:element name="Text" type="TextType"/>
@@ -52,7 +52,7 @@
           </xs:element>
           <xs:element name="ResizeBox" minOccurs="0">
             <xs:annotation>
-              <xs:documentation>The optional box used to resize and reposition select graphic elements.  The graphical extent of all elements with ResizeControl set to AddToResizeBox will be added to this box, potentially causing it to grow in size.  Any change in size causes all elements with ResizeControl set to AdjustWithResizeBox to be proportionally resized and repositioned.</xs:documentation>
+              <xs:documentation>The optional box used to resize and reposition select graphic elements.  The graphical extent of all elements with ResizeControl set to AddToResizeBox will be added to this box, potentially causing it to grow in size.  Any change in size causes all elements with ResizeControl set to AdjustToResizeBox to be proportionally resized and repositioned.</xs:documentation>
             </xs:annotation>
             <xs:complexType>
               <xs:sequence>
@@ -76,18 +76,10 @@
                     <xs:documentation>The initial height of the resize box, in mm.</xs:documentation>
                   </xs:annotation>
                 </xs:element>
-                <xs:element name="GrowControl">
+                <xs:element name="GrowControl" type="xs:string">
                   <xs:annotation>
-                    <xs:documentation>Specifies how the resize box grows in size.</xs:documentation>
+                    <xs:documentation>Specifies how the resize box grows in size.  This must evaluate to one of: GrowInX, GrowInY, GrowInXY, or GrowInXYMaintainAspect (default).</xs:documentation>
                   </xs:annotation>
-                  <xs:simpleType>
-                    <xs:restriction base="xs:string">
-                      <xs:enumeration value="GrowInX"/>
-                      <xs:enumeration value="GrowInY"/>
-                      <xs:enumeration value="GrowInXY"/>
-                      <xs:enumeration value="GrowInXYMaintainAspect"/>
-                    </xs:restriction>
-                  </xs:simpleType>
                 </xs:element>
               </xs:sequence>
             </xs:complexType>
@@ -98,20 +90,14 @@
             </xs:annotation>
             <xs:complexType>
               <xs:sequence>
-                <xs:element name="AngleControl" minOccurs="0">
+                <xs:element name="AngleControl" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>Specifies how the symbol angle is defined.</xs:documentation>
+                    <xs:documentation>Specifies how the symbol angle is defined.  This must evaluate to one of: FromAngle or FromGeometry (default).</xs:documentation>
                   </xs:annotation>
-                  <xs:simpleType>
-                    <xs:restriction base="xs:string">
-                      <xs:enumeration value="FromAngle"/>
-                      <xs:enumeration value="FromGeometry"/>
-                    </xs:restriction>
-                  </xs:simpleType>
                 </xs:element>
                 <xs:element name="Angle" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>Specifies the symbol angle, in degrees.  Only applies if AngleControl is set to FromAngle.</xs:documentation>
+                    <xs:documentation>Specifies the symbol angle, in degrees.  Only applies if AngleControl evaluates to FromAngle.</xs:documentation>
                   </xs:annotation>
                 </xs:element>
                 <xs:element name="OriginOffsetX" type="xs:string" minOccurs="0">
@@ -133,54 +119,34 @@
             </xs:annotation>
             <xs:complexType>
               <xs:sequence>
-                <xs:element name="AngleControl" minOccurs="0">
+                <xs:element name="AngleControl" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>Specifies how the symbol angle is defined.</xs:documentation>
+                    <xs:documentation>Specifies how the symbol angle is defined.  This must evaluate to one of: FromAngle or FromGeometry (default).</xs:documentation>
                   </xs:annotation>
-                  <xs:simpleType>
-                    <xs:restriction base="xs:string">
-                      <xs:enumeration value="FromAngle"/>
-                      <xs:enumeration value="FromGeometry"/>
-                    </xs:restriction>
-                  </xs:simpleType>
                 </xs:element>
-                <xs:element name="UnitsControl" minOccurs="0">
+                <xs:element name="UnitsControl" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>Specifies whether the distribution parameters are interpreted as absolute values (in mm) or parametric values.</xs:documentation>
+                    <xs:documentation>Specifies whether the distribution parameters are interpreted as absolute values (in mm) or parametric values.  This must evaluate to one of: Absolute (default) or Parametric.</xs:documentation>
                   </xs:annotation>
-                  <xs:simpleType>
-                    <xs:restriction base="xs:string">
-                      <xs:enumeration value="Absolute"/>
-                      <xs:enumeration value="Parametric"/>
-                    </xs:restriction>
-                  </xs:simpleType>
                 </xs:element>
-                <xs:element name="VertexControl" minOccurs="0">
+                <xs:element name="VertexControl" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>Specifies the symbol behavior at vertices.</xs:documentation>
+                    <xs:documentation>Specifies the symbol behavior at vertices.  This must evaluate to one of: NoOverlap (default), OverlapDirect, OverlapNoWrap, or OverlapWrap.</xs:documentation>
                   </xs:annotation>
-                  <xs:simpleType>
-                    <xs:restriction base="xs:string">
-                      <xs:enumeration value="NoOverlap"/>
-                      <xs:enumeration value="OverlapDirect"/>
-                      <xs:enumeration value="OverlapNoWrap"/>
-                      <xs:enumeration value="OverlapWrap"/>
-                    </xs:restriction>
-                  </xs:simpleType>
                 </xs:element>
                 <xs:element name="Angle" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>Specifies the symbol angle, in degrees.  Only applies if AngleControl is set to FromAngle.</xs:documentation>
+                    <xs:documentation>Specifies the symbol angle, in degrees.  Only applies if AngleControl evaluates to FromAngle.</xs:documentation>
                   </xs:annotation>
                 </xs:element>
                 <xs:element name="StartOffset" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>Specifies where the symbol distribution begins, relative to the start of the curve.</xs:documentation>
+                    <xs:documentation>Specifies where the symbol distribution begins, relative to the start of the feature.</xs:documentation>
                   </xs:annotation>
                 </xs:element>
                 <xs:element name="EndOffset" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>Specifies where the symbol distribution ends, relative to the end of the curve.</xs:documentation>
+                    <xs:documentation>Specifies where the symbol distribution ends, relative to the end of the feature.</xs:documentation>
                   </xs:annotation>
                 </xs:element>
                 <xs:element name="Repeat" type="xs:string" minOccurs="0">
@@ -188,11 +154,16 @@
                     <xs:documentation>Specifies the separation between repeating symbols.</xs:documentation>
                   </xs:annotation>
                 </xs:element>
-                <xs:element name="VertexAngleLimit" minOccurs="0">
+                <xs:element name="VertexAngleLimit" type="xs:string" minOccurs="0">
                   <xs:annotation>
                     <xs:documentation>Specifies the limiting angle, in degrees, by a which the feature geometry can change before some of the VertexControl options take effect.</xs:documentation>
                   </xs:annotation>
                 </xs:element>
+                <xs:element name="VertexJoin" type="xs:string" minOccurs="0">
+                  <xs:annotation>
+                    <xs:documentation>Specifies the wrapping behavior at vertices for all graphic elements.  Only applies if VertexControl evaluates to OverlapWrap.  This must evaluate to one of: None, Bevel, Round (default), or Miter.</xs:documentation>
+                  </xs:annotation>
+                </xs:element>
                 <xs:element name="DefaultPath" type="PathType" minOccurs="0">
                   <xs:annotation>
                     <xs:documentation>Specifies the default path attributes to use when drawing the symbol.  These apply to any centerline that gets drawn where the symbol can't draw, and to path elements that don't specify attributes.  The geometry contained in this specify is ignored and should be empty.</xs:documentation>
@@ -207,54 +178,34 @@
             </xs:annotation>
             <xs:complexType>
               <xs:sequence>
-                <xs:element name="OriginControl" minOccurs="0">
+                <xs:element name="AngleControl" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>Specifies how the symbol grid origin is defined.</xs:documentation>
+                    <xs:documentation>Specifies how the symbol angle is defined.  This must evaluate to one of: FromAngle or FromGeometry (default).</xs:documentation>
                   </xs:annotation>
-                  <xs:simpleType>
-                    <xs:restriction base="xs:string">
-                      <xs:enumeration value="Global"/>
-                      <xs:enumeration value="Local"/>
-                      <xs:enumeration value="Centroid"/>
-                    </xs:restriction>
-                  </xs:simpleType>
                 </xs:element>
-                <xs:element name="AngleControl" minOccurs="0">
+                <xs:element name="OriginControl" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>Specifies how the angle for the repeating symbol is defined.</xs:documentation>
+                    <xs:documentation>Specifies how the symbol grid origin is defined.  This must evaluate to one of: Global (default), Local, or Centroid.</xs:documentation>
                   </xs:annotation>
-                  <xs:simpleType>
-                    <xs:restriction base="xs:string">
-                      <xs:enumeration value="FromAngle"/>
-                      <xs:enumeration value="FromGeometry"/>
-                    </xs:restriction>
-                  </xs:simpleType>
                 </xs:element>
-                <xs:element name="ClippingControl" minOccurs="0">
+                <xs:element name="ClippingControl" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>Specifies the clipping behavior of the symbol at polygon boundaries.</xs:documentation>
+                    <xs:documentation>Specifies the clipping behavior of the symbol at polygon boundaries.  This must evaluate to one of: Clip (default), Inside, or Overlap.</xs:documentation>
                   </xs:annotation>
-                  <xs:simpleType>
-                    <xs:restriction base="xs:string">
-                      <xs:enumeration value="Clip"/>
-                      <xs:enumeration value="Inside"/>
-                      <xs:enumeration value="Overlap"/>
-                    </xs:restriction>
-                  </xs:simpleType>
                 </xs:element>
-                <xs:element name="OriginX" type="xs:string" minOccurs="0">
+                <xs:element name="Angle" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>The x-coordinate of the symbol grid origin, in mm.  Only applies if OriginControl is set to Global or Local.</xs:documentation>
+                    <xs:documentation>Specifies the angle of each repeating symbol, in degrees.  Only applies if AngleControl evaluates to FromAngle.</xs:documentation>
                   </xs:annotation>
                 </xs:element>
-                <xs:element name="OriginY" type="xs:string" minOccurs="0">
+                <xs:element name="OriginX" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>The y-coordinate of the symbol grid origin, in mm.  Only applies if OriginControl is set to Global or Local.</xs:documentation>
+                    <xs:documentation>The x-coordinate of the symbol grid origin, in mm.  Only applies if OriginControl evaluates to Global or Local.</xs:documentation>
                   </xs:annotation>
                 </xs:element>
-                <xs:element name="Angle" type="xs:string" minOccurs="0">
+                <xs:element name="OriginY" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>Specifies the angle of each repeating symbol, in degrees.  Only applies if AngleControl is set to FromAngle.</xs:documentation>
+                    <xs:documentation>The y-coordinate of the symbol grid origin, in mm.  Only applies if OriginControl evaluates to Global or Local.</xs:documentation>
                   </xs:annotation>
                 </xs:element>
                 <xs:element name="RepeatX" type="xs:string" minOccurs="0">
@@ -307,7 +258,7 @@
                           <xs:documentation>A long description of the parameter.  This might include a description of useful values for this parameter.</xs:documentation>
                         </xs:annotation>
                       </xs:element>
-                      <xs:element name="ValueList" minOccurs="0">
+                      <xs:element name="AllowedValues" minOccurs="0">
                         <xs:annotation>
                           <xs:documentation>A list of allowed values for this parameter.</xs:documentation>
                         </xs:annotation>
@@ -315,7 +266,7 @@
                           <xs:sequence maxOccurs="unbounded">
                             <xs:element name="Value" type="xs:string">
                               <xs:annotation>
-                                <xs:documentation>A value in the value list.</xs:documentation>
+                                <xs:documentation>A value in the list.</xs:documentation>
                               </xs:annotation>
                             </xs:element>
                           </xs:sequence>
@@ -338,7 +289,7 @@
     <xs:complexContent>
       <xs:extension base="SymbolDefinitionBaseType">
         <xs:sequence>
-          <xs:element name="SimpleSymbol" maxOccurs="unbounded">
+          <xs:element name="SimpleSymbol" minOccurs="0" maxOccurs="unbounded">
             <xs:complexType>
               <xs:sequence>
                 <xs:choice>
@@ -347,7 +298,7 @@
                       <xs:documentation>An inlined SimpleSymbolDefinition.</xs:documentation>
                     </xs:annotation>
                   </xs:element>
-                  <xs:element name="SimpleSymbolReference" type="xs:string">
+                  <xs:element name="SymbolReference" type="xs:string">
                     <xs:annotation>
                       <xs:documentation>A library reference to an existing SimpleSymbolDefinition.</xs:documentation>
                     </xs:annotation>
@@ -355,7 +306,7 @@
                 </xs:choice>
                 <xs:element name="RenderingPass" type="xs:string" minOccurs="0">
                   <xs:annotation>
-                    <xs:documentation>The rendering pass in which  this symbol definition draws.  Symbol definitions that do not specifiy this will be drawn in a separate final rendering pass.</xs:documentation>
+                    <xs:documentation>The rendering pass in which  this symbol definition draws.  Symbol definitions that do not specifiy this will be drawn using rendering pass 0.</xs:documentation>
                   </xs:annotation>
                 </xs:element>
               </xs:sequence>
@@ -370,17 +321,10 @@
       <xs:documentation>Base type used with all graphic elements.</xs:documentation>
     </xs:annotation>
     <xs:sequence>
-      <xs:element name="ResizeControl" minOccurs="0">
+      <xs:element name="ResizeControl" type="xs:string" minOccurs="0">
         <xs:annotation>
-          <xs:documentation>Specifies how this graphic element interacts with the resize box.  AddToResizeBox means the element's graphical extent is added to the resize box, but the element is not resized or repositioned if the resize box grows.  AdjustToResizeBox means the element is resized and repositioned relative to the resize box, but its extent is not added to the box.  ResizeNone, the default, means the element does not interact with the resize box.</xs:documentation>
+          <xs:documentation>Specifies how this graphic element interacts with the resize box.  This must evaluate to one of: ResizeNone (default), AddToResizeBox, or AdjustToResizeBox.  AddToResizeBox means the element's graphical extent is added to the resize box, but the element is not resized or repositioned if the resize box grows.  AdjustToResizeBox means the element is resized and repositioned relative to the resize box, but its extent is not added to the box.  ResizeNone means the element does not interact with the resize box.</xs:documentation>
         </xs:annotation>
-        <xs:simpleType>
-          <xs:restriction base="xs:string">
-            <xs:enumeration value="ResizeNone"/>
-            <xs:enumeration value="AddToResizeBox"/>
-            <xs:enumeration value="AdjustToResizeBox"/>
-          </xs:restriction>
-        </xs:simpleType>
       </xs:element>
     </xs:sequence>
   </xs:complexType>
@@ -413,34 +357,18 @@
           </xs:element>
           <xs:element name="LineWeightScalable" type="xs:string" minOccurs="0">
             <xs:annotation>
-              <xs:documentation>Boolean value which specifies whether the line weight scales with the symbol.  This behavior is independent of the symbol's size context.  The default value is true.</xs:documentation>
+              <xs:documentation>Boolean value which specifies whether the line weight scales with the symbol.  This behavior is independent of the symbol's size context.  This must evaluate to True (default) or False.</xs:documentation>
             </xs:annotation>
           </xs:element>
-          <xs:element name="LineCap" minOccurs="0">
+          <xs:element name="LineCap" type="xs:string" minOccurs="0">
             <xs:annotation>
-              <xs:documentation>The cap type to use at the ends of each segment in the path outline.</xs:documentation>
+              <xs:documentation>The cap type to use at the ends of each segment in the path outline.  This must evaluate to one of: None, Round (default), Triangle, or Square.</xs:documentation>
             </xs:annotation>
-            <xs:simpleType>
-              <xs:restriction base="xs:string">
-                <xs:enumeration value="None"/>
-                <xs:enumeration value="Round"/>
-                <xs:enumeration value="Triangle"/>
-                <xs:enumeration value="Square"/>
-              </xs:restriction>
-            </xs:simpleType>
           </xs:element>
-          <xs:element name="LineJoin" minOccurs="0">
+          <xs:element name="LineJoin" type="xs:string" minOccurs="0">
             <xs:annotation>
-              <xs:documentation>The join type to use at each vertex in the path outline.</xs:documentation>
+              <xs:documentation>The join type to use at each vertex in the path outline.  This must evaluate to one of: None, Bevel, Round (default), or Miter.</xs:documentation>
             </xs:annotation>
-            <xs:simpleType>
-              <xs:restriction base="xs:string">
-                <xs:enumeration value="None"/>
-                <xs:enumeration value="Bevel"/>
-                <xs:enumeration value="Round"/>
-                <xs:enumeration value="Miter"/>
-              </xs:restriction>
-            </xs:simpleType>
           </xs:element>
           <xs:element name="LineMiterLimit" type="xs:string" minOccurs="0">
             <xs:annotation>
@@ -518,17 +446,17 @@
           </xs:element>
           <xs:element name="Bold" type="xs:string" minOccurs="0">
             <xs:annotation>
-              <xs:documentation>Specifies if the text should be drawn using a bold font.</xs:documentation>
+              <xs:documentation>Specifies if the text should be drawn using a bold font.  This must evaluate to True or False (default).</xs:documentation>
             </xs:annotation>
           </xs:element>
           <xs:element name="Italic" type="xs:string" minOccurs="0">
             <xs:annotation>
-              <xs:documentation>Specifies if the text should be drawn using an italic font.</xs:documentation>
+              <xs:documentation>Specifies if the text should be drawn using an italic font.  This must evaluate to True or False (default).</xs:documentation>
             </xs:annotation>
           </xs:element>
           <xs:element name="Underlined" type="xs:string" minOccurs="0">
             <xs:annotation>
-              <xs:documentation>Specifies if the text should be underlined.</xs:documentation>
+              <xs:documentation>Specifies if the text should be underlined.  This must evaluate to True or False (default).</xs:documentation>
             </xs:annotation>
           </xs:element>
           <xs:element name="Height" type="xs:string" minOccurs="0">
@@ -553,17 +481,17 @@
           </xs:element>
           <xs:element name="HorizontalAlignment" type="xs:string" minOccurs="0">
             <xs:annotation>
-              <xs:documentation>The horizontal alignment of the text box relative to its position.  This must evaluate to one of: Left, Center, or Right.</xs:documentation>
+              <xs:documentation>The horizontal alignment of the text box relative to its position.  This must evaluate to one of: Left, Center (default), or Right.</xs:documentation>
             </xs:annotation>
           </xs:element>
           <xs:element name="VerticalAlignment" type="xs:string" minOccurs="0">
             <xs:annotation>
-              <xs:documentation>The vertical alignment of the text box relative to its position.  This must evaluate to one of: Bottom, Baseline, Halfline, Capline, or Top.</xs:documentation>
+              <xs:documentation>The vertical alignment of the text box relative to its position.  This must evaluate to one of: Bottom, Baseline (default), Halfline, Capline, or Top.</xs:documentation>
             </xs:annotation>
           </xs:element>
           <xs:element name="Justification" type="xs:string" minOccurs="0">
             <xs:annotation>
-              <xs:documentation>The horizontal justification of individual lines of text in a multi-line text string.  This must evaluate to one of: Left, Center, Right, or Justified.</xs:documentation>
+              <xs:documentation>The horizontal justification of individual lines of text in a multi-line text string.  This must evaluate to one of: Left, Center (default), Right, or Justified.</xs:documentation>
             </xs:annotation>
           </xs:element>
           <xs:element name="LineSpacing" type="xs:string" minOccurs="0">

Modified: trunk/MgDev/Common/Stylization/DWFRenderer.cpp
===================================================================
--- trunk/MgDev/Common/Stylization/DWFRenderer.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/Stylization/DWFRenderer.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -2125,9 +2125,9 @@
 // returns number of W2D units per millimeter screen
 double DWFRenderer::GetPixelsPerMillimeterScreen()
 {
-    //  [ W2D ]     [ W2D ]     [ World ]     meter-world     mm-world
-    // --------- = --------- * ----------- * ------------- * ---------
-    // mm-screen   [ World ]   meter-world   1000 mm-world   mm-screen
+    //  [ W2D ]     [ World ]     meter-world     mm-world      [ W2D ]
+    // --------- * ----------- * ------------- * ---------  =  ---------
+    // [ World ]   meter-world   1000 mm-world   mm-screen     mm-screen
     return m_scale / m_metersPerUnit / 1000.0 * m_mapScale;
 }
 
@@ -2135,9 +2135,9 @@
 // returns number of W2D units per millimeter world
 double DWFRenderer::GetPixelsPerMillimeterWorld()
 {
-    //  [ W2D ]    [ W2D ]     [ World ]     meter-world
-    // -------- = --------- * ----------- * -------------
-    // mm-world   [ World ]   meter-world   1000 mm-world
+    //  [ W2D ]     [ World ]     meter-world       [ W2D ]
+    // --------- * ----------- * -------------  =  --------
+    // [ World ]   meter-world   1000 mm-world     mm-world
     return m_scale / m_metersPerUnit / 1000.0;
 }
 

Modified: trunk/MgDev/Common/Stylization/SE_RenderProxies.h
===================================================================
--- trunk/MgDev/Common/Stylization/SE_RenderProxies.h	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/Stylization/SE_RenderProxies.h	2007-03-20 14:04:18 UTC (rev 1296)
@@ -161,13 +161,13 @@
     const wchar_t* angleControl;
     const wchar_t* unitsControl;
     const wchar_t* vertexControl;
-//  const wchar_t* join;
 
     double angle;
     double startOffset;
     double endOffset;
     double repeat;
     double vertexAngleLimit;
+    const wchar_t* vertexJoin;
 };
 
 

Modified: trunk/MgDev/Common/Stylization/SE_StyleVisitor.cpp
===================================================================
--- trunk/MgDev/Common/Stylization/SE_StyleVisitor.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/Stylization/SE_StyleVisitor.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -76,12 +76,12 @@
     ParseStringExpression(lineUsage.GetAngleControl(), style->angleControl);
     ParseStringExpression(lineUsage.GetUnitsControl(), style->unitsControl);
     ParseStringExpression(lineUsage.GetVertexControl(), style->vertexControl);
-//  ParseStringExpression(lineUsage.GetLineJoin(), style->join);
     ParseDoubleExpression(lineUsage.GetAngle(), style->angle);
     ParseDoubleExpression(lineUsage.GetStartOffset(), style->startOffset);
     ParseDoubleExpression(lineUsage.GetEndOffset(), style->endOffset);
     ParseDoubleExpression(lineUsage.GetRepeat(), style->repeat);
     ParseDoubleExpression(lineUsage.GetVertexAngleLimit(), style->vertexAngleLimit);
+    ParseStringExpression(lineUsage.GetVertexJoin(), style->vertexJoin);
 
     //set flag if all properties are constant
     style->cacheable = ! (  style->angle.expression
@@ -556,7 +556,7 @@
 
         if (m_primitive)
         {
-            m_primitive->resize = elem->GetResizeControl();
+            ParseStringExpression(elem->GetResizeControl(), m_primitive->resizeControl);
             m_style->symbol.push_back(m_primitive);
 
             //also update the style's cacheable flag to take into account the primitive's flag
@@ -574,7 +574,7 @@
         ParseDoubleExpression(box->GetSizeY(), m_style->resizeSize[1]);
         ParseDoubleExpression(box->GetPositionX(), m_style->resizePosition[0]);
         ParseDoubleExpression(box->GetPositionY(), m_style->resizePosition[1]);
-        m_style->resize = box->GetGrowControl();
+        ParseStringExpression(box->GetGrowControl(), m_style->growControl);
 
         m_style->cacheable = m_style->cacheable &&
                              ! (  m_style->resizeSize[0].expression

Modified: trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.cpp
===================================================================
--- trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.cpp	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.cpp	2007-03-20 14:04:18 UTC (rev 1296)
@@ -38,7 +38,8 @@
 SE_RenderPrimitive* SE_Polyline::evaluate(SE_EvalContext* cxt)
 {
     SE_RenderPolyline* ret = new SE_RenderPolyline();
-    ret->resize = (resize == GraphicElement::AdjustToResizeBox);
+    const wchar_t* sResizeCtrl = resizeControl.evaluate(cxt->exec);
+    ret->resize = (sResizeCtrl && wcscmp(sResizeCtrl, L"AdjustToResizeBox") == 0);
 
     double wx =     weightScalable.evaluate(cxt->exec)? cxt->mm2pxw : cxt->mm2pxs;
     ret->weight =   weight.evaluate(cxt->exec) * wx;
@@ -59,7 +60,8 @@
 SE_RenderPrimitive* SE_Polygon::evaluate(SE_EvalContext* cxt)
 {
     SE_RenderPolygon* ret = new SE_RenderPolygon();
-    ret->resize = (resize == GraphicElement::AdjustToResizeBox);
+    const wchar_t* sResizeCtrl = resizeControl.evaluate(cxt->exec);
+    ret->resize = (sResizeCtrl && wcscmp(sResizeCtrl, L"AdjustToResizeBox") == 0);
 
     ret->fill = fill.evaluate(cxt->exec);
 
@@ -85,7 +87,8 @@
         return NULL;
 
     SE_RenderText* ret = new SE_RenderText();
-    ret->resize = (resize == GraphicElement::AdjustToResizeBox);
+    const wchar_t* sResizeCtrl = resizeControl.evaluate(cxt->exec);
+    ret->resize = (sResizeCtrl && wcscmp(sResizeCtrl, L"AdjustToResizeBox") == 0);
 
     ret->text = textExpr.evaluate(cxt->exec);
     ret->position[0] = position[0].evaluate(cxt->exec);
@@ -164,7 +167,8 @@
 SE_RenderPrimitive* SE_Raster::evaluate(SE_EvalContext* cxt)
 {
     SE_RenderRaster* ret = new SE_RenderRaster();
-    ret->resize = (resize == GraphicElement::AdjustToResizeBox);
+    const wchar_t* sResizeCtrl = resizeControl.evaluate(cxt->exec);
+    ret->resize = (sResizeCtrl && wcscmp(sResizeCtrl, L"AdjustToResizeBox") == 0);
 
     if (!pngPtr)
     {
@@ -263,28 +267,40 @@
 
             rstyle->symbol.push_back(rsym);
 
-            if (useBox && sym->resize == GraphicElement::AddToResizeBox)
-                rsym->bounds->Contained(minx, miny, maxx, maxy, growx, growy);
+            if (useBox)
+            {
+                const wchar_t* sResizeCtrl = sym->resizeControl.evaluate(cxt->exec);
+                if (sResizeCtrl && wcscmp(sResizeCtrl, L"AddToResizeBox") == 0)
+                    rsym->bounds->Contained(minx, miny, maxx, maxy, growx, growy);
+            }
         }
     }
 
     if (useBox)
     {
-        switch(resize)
+        const wchar_t* sGrowCtrl = growControl.evaluate(cxt->exec);
+        // TODO - if the string is empty we need to use the default
+        if (sGrowCtrl)
         {
-        case ResizeBox::GrowInX:
-            growy = 0.0;
-            break;
-
-        case ResizeBox::GrowInY:
-            growx = 0.0;
-            break;
-
-        case ResizeBox::GrowInXYMaintainAspect:
-            if (growy > growx)
-                growx = growy;
-            else if (growx > growy)
-                growy = growx;
+            if (wcscmp(sGrowCtrl, L"GrowInX") == 0)
+            {
+                growy = 0.0;
+            }
+            else if (wcscmp(sGrowCtrl, L"GrowInY") == 0)
+            {
+                growx = 0.0;
+            }
+            else if (wcscmp(sGrowCtrl, L"GrowInXY") == 0)
+            {
+                // TODO
+            }
+            else if (wcscmp(sGrowCtrl, L"GrowInXYMaintainAspect") == 0)
+            {
+                if (growy > growx)
+                    growx = growy;
+                else if (growx > growy)
+                    growy = growx;
+            }
         }
 
         SE_Matrix totalxf(*cxt->xform);
@@ -430,13 +446,13 @@
     render->angleControl = angleControl.evaluate(cxt->exec);
     render->unitsControl = unitsControl.evaluate(cxt->exec);
     render->vertexControl = vertexControl.evaluate(cxt->exec);
-//  render->join = style->join.evaluate(m_exec);
 
     render->angle = angle.evaluate(cxt->exec) * M_PI180;
     render->startOffset = startOffset.evaluate(cxt->exec)*cxt->mm2px;
     render->endOffset = endOffset.evaluate(cxt->exec)*cxt->mm2px;
     render->repeat = repeat.evaluate(cxt->exec)*cxt->mm2px;
     render->vertexAngleLimit = vertexAngleLimit.evaluate(cxt->exec) * M_PI180;
+    render->vertexJoin = vertexJoin.evaluate(cxt->exec);
 
     //evaluate all the primitives too
     SE_Style::evaluate(cxt);

Modified: trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.h
===================================================================
--- trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.h	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.h	2007-03-20 14:04:18 UTC (rev 1296)
@@ -54,7 +54,7 @@
 
 struct SE_Primitive
 {
-    GraphicElement::ResizeControl resize;
+    SE_String resizeControl;
     bool cacheable;
 
     virtual ~SE_Primitive() { }
@@ -139,7 +139,7 @@
     bool useBox;
     SE_Double resizePosition[2];
     SE_Double resizeSize[2];
-    ResizeBox::GrowControl resize;
+    SE_String growControl;
 
     SE_INLINE SE_Style() : rstyle(NULL), cacheable(false) { }
 
@@ -167,13 +167,13 @@
     SE_String angleControl;
     SE_String unitsControl;
     SE_String vertexControl;
-//  SE_String join;
 
     SE_Double angle;
     SE_Double startOffset;
     SE_Double endOffset;
     SE_Double repeat;
     SE_Double vertexAngleLimit;
+    SE_String vertexJoin;
 
     SE_INLINE SE_LineStyle() { }
     virtual void apply(LineBuffer* geometry, SE_Renderer* renderer);

Modified: trunk/MgDev/UnitTest/TestData/Symbology/MdfTestCompTypeStyle.ldf
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/MdfTestCompTypeStyle.ldf	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/UnitTest/TestData/Symbology/MdfTestCompTypeStyle.ldf	2007-03-20 14:04:18 UTC (rev 1296)
@@ -29,7 +29,7 @@
                 <SymbolReference>Library://Symbology/Symbols/PointSymbolParam.SymbolDefinition</SymbolReference>
                 <ScaleX>1.0</ScaleX>
                 <ScaleY>1.0</ScaleY>
-                <SizeContext>Mapping</SizeContext>
+                <SizeContext>MappingUnits</SizeContext>
                 <DrawLast>False</DrawLast>
                 <CheckExclusionRegion>False</CheckExclusionRegion>
                 <AddToExclusionRegion>False</AddToExclusionRegion>
@@ -45,18 +45,18 @@
                         <Description>A dummy symbol used to test the MdfModel/MdfParser code.</Description>
                         <Graphics>
                           <Path>
-                            <ResizeControl>AddToResizeBox</ResizeControl>
+                            <ResizeControl>'AddToResizeBox'</ResizeControl>
                             <Geometry>M 0,0 L 5,0 L 5,5 L 0,5 L 0,0</Geometry>
                             <FillColor>ffff0000</FillColor>
                             <LineColor>%OUTLINE%</LineColor>
                             <LineWeight>2*(%THICKNESS% + 1)</LineWeight>
                             <LineWeightScalable>true</LineWeightScalable>
-                            <LineCap>None</LineCap>
-                            <LineJoin>None</LineJoin>
+                            <LineCap>'None'</LineCap>
+                            <LineJoin>'None'</LineJoin>
                             <LineMiterLimit>5.0</LineMiterLimit>
                           </Path>
                           <Image>
-                            <ResizeControl>AddToResizeBox</ResizeControl>
+                            <ResizeControl>'AddToResizeBox'</ResizeControl>
                             <Content>R0lGODlhcgGSALMAAAQCAEMmCZtuMFQxDS8b</Content>
                             <SizeX>100.0</SizeX>
                             <SizeY>100.0</SizeY>
@@ -65,7 +65,7 @@
                             <Angle>0.0</Angle>
                           </Image>
                           <Image>
-                            <ResizeControl>AddToResizeBox</ResizeControl>
+                            <ResizeControl>'AddToResizeBox'</ResizeControl>
                             <Reference>Library://Image.jpg</Reference>
                             <SizeX>100.0</SizeX>
                             <SizeY>100.0</SizeY>
@@ -74,7 +74,7 @@
                             <Angle>0.0</Angle>
                           </Image>
                           <Text>
-                            <ResizeControl>AddToResizeBox</ResizeControl>
+                            <ResizeControl>'AddToResizeBox'</ResizeControl>
                             <String>Some text</String>
                             <FontName>Arial</FontName>
                             <Bold>false</Bold>
@@ -103,42 +103,43 @@
                           <PositionY>0.0</PositionY>
                           <SizeX>50.0</SizeX>
                           <SizeY>10.0</SizeY>
-                          <GrowControl>GrowInX</GrowControl>
+                          <GrowControl>'GrowInXYMaintainAspect'</GrowControl>
                         </ResizeBox>
                         <PointUsage>
-                          <AngleControl>FromGeometry</AngleControl>
+                          <AngleControl>'FromGeometry'</AngleControl>
                           <Angle>0.0</Angle>
                           <OriginOffsetX>0.0</OriginOffsetX>
                           <OriginOffsetY>0.0</OriginOffsetY>
                         </PointUsage>
                         <LineUsage>
-                          <AngleControl>FromGeometry</AngleControl>
-                          <UnitsControl>Parametric</UnitsControl>
-                          <VertexControl>NoOverlap</VertexControl>
+                          <AngleControl>'FromGeometry'</AngleControl>
+                          <UnitsControl>'Absolute'</UnitsControl>
+                          <VertexControl>'NoOverlap'</VertexControl>
                           <Angle>0.0</Angle>
                           <StartOffset>0.0</StartOffset>
                           <EndOffset>0.0</EndOffset>
                           <Repeat>10.0</Repeat>
                           <VertexAngleLimit>5.0</VertexAngleLimit>
+                          <VertexJoin>'None'</VertexJoin>
                           <DefaultPath>
-                            <ResizeControl>AddToResizeBox</ResizeControl>
+                            <ResizeControl>'AddToResizeBox'</ResizeControl>
                             <Geometry>M 0,0 L 5,0 L 5,5 L 0,5 L 0,0</Geometry>
                             <FillColor>ffff0000</FillColor>
                             <LineColor>ff00ff00</LineColor>
                             <LineWeight>1.0</LineWeight>
                             <LineWeightScalable>true</LineWeightScalable>
-                            <LineCap>None</LineCap>
-                            <LineJoin>None</LineJoin>
+                            <LineCap>'None'</LineCap>
+                            <LineJoin>'None'</LineJoin>
                             <LineMiterLimit>5.0</LineMiterLimit>
                           </DefaultPath>
                         </LineUsage>
                         <AreaUsage>
-                          <OriginControl>Centroid</OriginControl>
-                          <AngleControl>FromGeometry</AngleControl>
-                          <ClippingControl>Overlap</ClippingControl>
+                          <AngleControl>'FromGeometry'</AngleControl>
+                          <OriginControl>'Global'</OriginControl>
+                          <ClippingControl>'Clip'</ClippingControl>
+                          <Angle>0.0</Angle>
                           <OriginX>0.0</OriginX>
                           <OriginY>0.0</OriginY>
-                          <Angle>0.0</Angle>
                           <RepeatX>10.0</RepeatX>
                           <RepeatY>5.0</RepeatY>
                           <BufferWidth>0.0</BufferWidth>
@@ -149,48 +150,48 @@
                             <DefaultValue>FFFF0000</DefaultValue>
                             <DisplayName>Outline Color</DisplayName>
                             <Description>The color of the outline of the box.</Description>
-                            <ValueList>
+                            <AllowedValues>
                               <Value>FFFF0000</Value>
                               <Value>FFFFFFFF</Value>
-                            </ValueList>
+                            </AllowedValues>
                           </Parameter>
                           <Parameter>
                             <Identifier>THICKNESS</Identifier>
                             <DefaultValue>-0.5</DefaultValue>
                             <DisplayName>Line Thickness</DisplayName>
                             <Description>The thickness of the line in mm... minus 2 and halved.</Description>
-                            <ValueList>
+                            <AllowedValues>
                               <Value>-1.0</Value>
                               <Value>-0.5</Value>
                               <Value>0.0</Value>
                               <Value>0.5</Value>
                               <Value>1.0</Value>
-                            </ValueList>
+                            </AllowedValues>
                           </Parameter>
                           <Parameter>
                             <Identifier>TEXTCOLOR</Identifier>
                             <DefaultValue>FFFFFF00</DefaultValue>
                             <DisplayName>Text Color</DisplayName>
                             <Description>The color of the text.</Description>
-                            <ValueList>
+                            <AllowedValues>
                               <Value>FFFF0000</Value>
                               <Value>FFFFFF00</Value>
                               <Value>FF00FF00</Value>
-                            </ValueList>
+                            </AllowedValues>
                           </Parameter>
                         </ParameterDefinition>
                       </SimpleSymbolDefinition>
                       <RenderingPass>10</RenderingPass>
                     </SimpleSymbol>
                     <SimpleSymbol>
-                      <SimpleSymbolReference>Library://Symbology/Symbols/MdfTestSimpleSymbol.SymbolDefinition</SimpleSymbolReference>
+                      <SymbolReference>Library://Symbology/Symbols/MdfTestSimpleSymbol.SymbolDefinition</SymbolReference>
                       <RenderingPass>20</RenderingPass>
                     </SimpleSymbol>
                   </CompoundSymbolDefinition>
                 </SymbolDefinition>
                 <ScaleX>2.0</ScaleX>
                 <ScaleY>2.0</ScaleY>
-                <SizeContext>Mapping</SizeContext>
+                <SizeContext>MappingUnits</SizeContext>
                 <DrawLast>False</DrawLast>
                 <CheckExclusionRegion>False</CheckExclusionRegion>
                 <AddToExclusionRegion>False</AddToExclusionRegion>

Modified: trunk/MgDev/UnitTest/TestData/Symbology/MdfTestCompoundSymbol.sd
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/MdfTestCompoundSymbol.sd	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/UnitTest/TestData/Symbology/MdfTestCompoundSymbol.sd	2007-03-20 14:04:18 UTC (rev 1296)
@@ -9,18 +9,18 @@
         <Description>A dummy symbol used to test the MdfModel/MdfParser code.</Description>
         <Graphics>
           <Path>
-            <ResizeControl>AddToResizeBox</ResizeControl>
+            <ResizeControl>'AddToResizeBox'</ResizeControl>
             <Geometry>M 0,0 L 5,0 L 5,5 L 0,5 L 0,0</Geometry>
             <FillColor>ffff0000</FillColor>
             <LineColor>%OUTLINE%</LineColor>
             <LineWeight>2*(%THICKNESS% + 1)</LineWeight>
             <LineWeightScalable>true</LineWeightScalable>
-            <LineCap>None</LineCap>
-            <LineJoin>None</LineJoin>
+            <LineCap>'None'</LineCap>
+            <LineJoin>'None'</LineJoin>
             <LineMiterLimit>5.0</LineMiterLimit>
           </Path>
           <Image>
-            <ResizeControl>AddToResizeBox</ResizeControl>
+            <ResizeControl>'AddToResizeBox'</ResizeControl>
             <Content>R0lGODlhcgGSALMAAAQCAEMmCZtuMFQxDS8b</Content>
             <SizeX>100.0</SizeX>
             <SizeY>100.0</SizeY>
@@ -29,7 +29,7 @@
             <Angle>0.0</Angle>
           </Image>
           <Image>
-            <ResizeControl>AddToResizeBox</ResizeControl>
+            <ResizeControl>'AddToResizeBox'</ResizeControl>
             <Reference>Library://Image.jpg</Reference>
             <SizeX>100.0</SizeX>
             <SizeY>100.0</SizeY>
@@ -38,7 +38,7 @@
             <Angle>0.0</Angle>
           </Image>
           <Text>
-            <ResizeControl>AddToResizeBox</ResizeControl>
+            <ResizeControl>'AddToResizeBox'</ResizeControl>
             <String>Some text</String>
             <FontName>Arial</FontName>
             <Bold>false</Bold>
@@ -67,42 +67,43 @@
           <PositionY>0.0</PositionY>
           <SizeX>50.0</SizeX>
           <SizeY>10.0</SizeY>
-          <GrowControl>GrowInX</GrowControl>
+          <GrowControl>'GrowInXYMaintainAspect'</GrowControl>
         </ResizeBox>
         <PointUsage>
-          <AngleControl>FromGeometry</AngleControl>
+          <AngleControl>'FromGeometry'</AngleControl>
           <Angle>0.0</Angle>
           <OriginOffsetX>0.0</OriginOffsetX>
           <OriginOffsetY>0.0</OriginOffsetY>
         </PointUsage>
         <LineUsage>
-          <AngleControl>FromGeometry</AngleControl>
-          <UnitsControl>Parametric</UnitsControl>
-          <VertexControl>NoOverlap</VertexControl>
+          <AngleControl>'FromGeometry'</AngleControl>
+          <UnitsControl>'Absolute'</UnitsControl>
+          <VertexControl>'NoOverlap'</VertexControl>
           <Angle>0.0</Angle>
           <StartOffset>0.0</StartOffset>
           <EndOffset>0.0</EndOffset>
           <Repeat>10.0</Repeat>
           <VertexAngleLimit>5.0</VertexAngleLimit>
+          <VertexJoin>'None'</VertexJoin>
           <DefaultPath>
-            <ResizeControl>AddToResizeBox</ResizeControl>
+            <ResizeControl>'AddToResizeBox'</ResizeControl>
             <Geometry>M 0,0 L 5,0 L 5,5 L 0,5 L 0,0</Geometry>
             <FillColor>ffff0000</FillColor>
             <LineColor>ff00ff00</LineColor>
             <LineWeight>1.0</LineWeight>
             <LineWeightScalable>true</LineWeightScalable>
-            <LineCap>None</LineCap>
-            <LineJoin>None</LineJoin>
+            <LineCap>'None'</LineCap>
+            <LineJoin>'None'</LineJoin>
             <LineMiterLimit>5.0</LineMiterLimit>
           </DefaultPath>
         </LineUsage>
         <AreaUsage>
-          <OriginControl>Centroid</OriginControl>
-          <AngleControl>FromGeometry</AngleControl>
-          <ClippingControl>Overlap</ClippingControl>
+          <AngleControl>'FromGeometry'</AngleControl>
+          <OriginControl>'Global'</OriginControl>
+          <ClippingControl>'Clip'</ClippingControl>
+          <Angle>0.0</Angle>
           <OriginX>0.0</OriginX>
           <OriginY>0.0</OriginY>
-          <Angle>0.0</Angle>
           <RepeatX>10.0</RepeatX>
           <RepeatY>5.0</RepeatY>
           <BufferWidth>0.0</BufferWidth>
@@ -113,41 +114,41 @@
             <DefaultValue>FFFF0000</DefaultValue>
             <DisplayName>Outline Color</DisplayName>
             <Description>The color of the outline of the box.</Description>
-            <ValueList>
+            <AllowedValues>
               <Value>FFFF0000</Value>
               <Value>FFFFFFFF</Value>
-            </ValueList>
+            </AllowedValues>
           </Parameter>
           <Parameter>
             <Identifier>THICKNESS</Identifier>
             <DefaultValue>-0.5</DefaultValue>
             <DisplayName>Line Thickness</DisplayName>
             <Description>The thickness of the line in mm... minus 2 and halved.</Description>
-            <ValueList>
+            <AllowedValues>
               <Value>-1.0</Value>
               <Value>-0.5</Value>
               <Value>0.0</Value>
               <Value>0.5</Value>
               <Value>1.0</Value>
-            </ValueList>
+            </AllowedValues>
           </Parameter>
           <Parameter>
             <Identifier>TEXTCOLOR</Identifier>
             <DefaultValue>FFFFFF00</DefaultValue>
             <DisplayName>Text Color</DisplayName>
             <Description>The color of the text.</Description>
-            <ValueList>
+            <AllowedValues>
               <Value>FFFF0000</Value>
               <Value>FFFFFF00</Value>
               <Value>FF00FF00</Value>
-            </ValueList>
+            </AllowedValues>
           </Parameter>
         </ParameterDefinition>
       </SimpleSymbolDefinition>
       <RenderingPass>10</RenderingPass>
     </SimpleSymbol>
     <SimpleSymbol>
-      <SimpleSymbolReference>Library://Symbology/Symbols/MdfTestSimpleSymbol.SymbolDefinition</SimpleSymbolReference>
+      <SymbolReference>Library://Symbology/Symbols/MdfTestSimpleSymbol.SymbolDefinition</SymbolReference>
       <RenderingPass>20</RenderingPass>
     </SimpleSymbol>
   </CompoundSymbolDefinition>

Modified: trunk/MgDev/UnitTest/TestData/Symbology/MdfTestSimpleSymbol.sd
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/MdfTestSimpleSymbol.sd	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/UnitTest/TestData/Symbology/MdfTestSimpleSymbol.sd	2007-03-20 14:04:18 UTC (rev 1296)
@@ -5,18 +5,18 @@
     <Description>A dummy symbol used to test the MdfModel/MdfParser code.</Description>
     <Graphics>
       <Path>
-        <ResizeControl>AddToResizeBox</ResizeControl>
+        <ResizeControl>'AddToResizeBox'</ResizeControl>
         <Geometry>M 0,0 L 5,0 L 5,5 L 0,5 L 0,0</Geometry>
         <FillColor>ffff0000</FillColor>
         <LineColor>%OUTLINE%</LineColor>
         <LineWeight>2*(%THICKNESS% + 1)</LineWeight>
         <LineWeightScalable>true</LineWeightScalable>
-        <LineCap>None</LineCap>
-        <LineJoin>None</LineJoin>
+        <LineCap>'None'</LineCap>
+        <LineJoin>'None'</LineJoin>
         <LineMiterLimit>5.0</LineMiterLimit>
       </Path>
       <Image>
-        <ResizeControl>AddToResizeBox</ResizeControl>
+        <ResizeControl>'AddToResizeBox'</ResizeControl>
         <Content>R0lGODlhcgGSALMAAAQCAEMmCZtuMFQxDS8b</Content>
         <SizeX>100.0</SizeX>
         <SizeY>100.0</SizeY>
@@ -25,7 +25,7 @@
         <Angle>0.0</Angle>
       </Image>
       <Image>
-        <ResizeControl>AddToResizeBox</ResizeControl>
+        <ResizeControl>'AddToResizeBox'</ResizeControl>
         <Reference>Library://Image.jpg</Reference>
         <SizeX>100.0</SizeX>
         <SizeY>100.0</SizeY>
@@ -34,7 +34,7 @@
         <Angle>0.0</Angle>
       </Image>
       <Text>
-        <ResizeControl>AddToResizeBox</ResizeControl>
+        <ResizeControl>'AddToResizeBox'</ResizeControl>
         <String>Some text</String>
         <FontName>Arial</FontName>
         <Bold>false</Bold>
@@ -63,42 +63,43 @@
       <PositionY>0.0</PositionY>
       <SizeX>50.0</SizeX>
       <SizeY>10.0</SizeY>
-      <GrowControl>GrowInX</GrowControl>
+      <GrowControl>'GrowInXYMaintainAspect'</GrowControl>
     </ResizeBox>
     <PointUsage>
-      <AngleControl>FromGeometry</AngleControl>
+      <AngleControl>'FromGeometry'</AngleControl>
       <Angle>0.0</Angle>
       <OriginOffsetX>0.0</OriginOffsetX>
       <OriginOffsetY>0.0</OriginOffsetY>
     </PointUsage>
     <LineUsage>
-      <AngleControl>FromGeometry</AngleControl>
-      <UnitsControl>Parametric</UnitsControl>
-      <VertexControl>NoOverlap</VertexControl>
+      <AngleControl>'FromGeometry'</AngleControl>
+      <UnitsControl>'Absolute'</UnitsControl>
+      <VertexControl>'NoOverlap'</VertexControl>
       <Angle>0.0</Angle>
       <StartOffset>0.0</StartOffset>
       <EndOffset>0.0</EndOffset>
       <Repeat>10.0</Repeat>
       <VertexAngleLimit>5.0</VertexAngleLimit>
+      <VertexJoin>'None'</VertexJoin>
       <DefaultPath>
-        <ResizeControl>AddToResizeBox</ResizeControl>
+        <ResizeControl>'AddToResizeBox'</ResizeControl>
         <Geometry>M 0,0 L 5,0 L 5,5 L 0,5 L 0,0</Geometry>
         <FillColor>ffff0000</FillColor>
         <LineColor>ff00ff00</LineColor>
         <LineWeight>1.0</LineWeight>
         <LineWeightScalable>true</LineWeightScalable>
-        <LineCap>None</LineCap>
-        <LineJoin>None</LineJoin>
+        <LineCap>'None'</LineCap>
+        <LineJoin>'None'</LineJoin>
         <LineMiterLimit>5.0</LineMiterLimit>
       </DefaultPath>
     </LineUsage>
     <AreaUsage>
-      <OriginControl>Centroid</OriginControl>
-      <AngleControl>FromGeometry</AngleControl>
-      <ClippingControl>Overlap</ClippingControl>
+      <AngleControl>'FromGeometry'</AngleControl>
+      <OriginControl>'Global'</OriginControl>
+      <ClippingControl>'Clip'</ClippingControl>
+      <Angle>0.0</Angle>
       <OriginX>0.0</OriginX>
       <OriginY>0.0</OriginY>
-      <Angle>0.0</Angle>
       <RepeatX>10.0</RepeatX>
       <RepeatY>5.0</RepeatY>
       <BufferWidth>0.0</BufferWidth>
@@ -109,34 +110,34 @@
         <DefaultValue>FFFF0000</DefaultValue>
         <DisplayName>Outline Color</DisplayName>
         <Description>The color of the outline of the box.</Description>
-        <ValueList>
+        <AllowedValues>
           <Value>FFFF0000</Value>
           <Value>FFFFFFFF</Value>
-        </ValueList>
+        </AllowedValues>
       </Parameter>
       <Parameter>
         <Identifier>THICKNESS</Identifier>
         <DefaultValue>-0.5</DefaultValue>
         <DisplayName>Line Thickness</DisplayName>
         <Description>The thickness of the line in mm... minus 2 and halved.</Description>
-        <ValueList>
+        <AllowedValues>
           <Value>-1.0</Value>
           <Value>-0.5</Value>
           <Value>0.0</Value>
           <Value>0.5</Value>
           <Value>1.0</Value>
-        </ValueList>
+        </AllowedValues>
       </Parameter>
       <Parameter>
         <Identifier>TEXTCOLOR</Identifier>
         <DefaultValue>FFFFFF00</DefaultValue>
         <DisplayName>Text Color</DisplayName>
         <Description>The color of the text.</Description>
-        <ValueList>
+        <AllowedValues>
           <Value>FFFF0000</Value>
           <Value>FFFFFF00</Value>
           <Value>FF00FF00</Value>
-        </ValueList>
+        </AllowedValues>
       </Parameter>
     </ParameterDefinition>
   </SimpleSymbolDefinition>

Modified: trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyLines.ldf
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyLines.ldf	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyLines.ldf	2007-03-20 14:04:18 UTC (rev 1296)
@@ -17,7 +17,7 @@
                 <SymbolReference>Library://Symbology/Symbols/LineSymbol.SymbolDefinition</SymbolReference>
                 <ScaleX>1</ScaleX>
                 <ScaleY>1</ScaleY>
-                <SizeContext>Device</SizeContext>
+                <SizeContext>DeviceUnits</SizeContext>
               </SymbolInstance>
             </SymbolCollection>
             <ParameterOverrides/>

Modified: trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyLinesCrossTick.ldf
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyLinesCrossTick.ldf	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyLinesCrossTick.ldf	2007-03-20 14:04:18 UTC (rev 1296)
@@ -17,7 +17,7 @@
                 <SymbolReference>Library://Symbology/Symbols/MTYP1500a.SymbolDefinition</SymbolReference>
                 <ScaleX>0.5</ScaleX>
                 <ScaleY>0.5</ScaleY>
-                <SizeContext>Device</SizeContext>
+                <SizeContext>DeviceUnits</SizeContext>
               </SymbolInstance>
             </SymbolCollection>
             <ParameterOverrides/>

Modified: trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyPoints.ldf
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyPoints.ldf	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyPoints.ldf	2007-03-20 14:04:18 UTC (rev 1296)
@@ -29,7 +29,7 @@
                 <SymbolReference>Library://Symbology/Symbols/PointSymbol.SymbolDefinition</SymbolReference>
                 <ScaleX>1</ScaleX>
                 <ScaleY>1</ScaleY>
-                <SizeContext>Device</SizeContext>
+                <SizeContext>DeviceUnits</SizeContext>
                 <DrawLast>False</DrawLast>
                 <CheckExclusionRegion>False</CheckExclusionRegion>
                 <AddToExclusionRegion>False</AddToExclusionRegion>

Modified: trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyPointsParam.ldf
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyPointsParam.ldf	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyPointsParam.ldf	2007-03-20 14:04:18 UTC (rev 1296)
@@ -29,7 +29,7 @@
                 <SymbolReference>Library://Symbology/Symbols/PointSymbolParam.SymbolDefinition</SymbolReference>
                 <ScaleX>1</ScaleX>
                 <ScaleY>1</ScaleY>
-                <SizeContext>Device</SizeContext>
+                <SizeContext>DeviceUnits</SizeContext>
                 <DrawLast>False</DrawLast>
                 <CheckExclusionRegion>False</CheckExclusionRegion>
                 <AddToExclusionRegion>False</AddToExclusionRegion>

Modified: trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyRoads.ldf
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyRoads.ldf	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/UnitTest/TestData/Symbology/UT_SymbologyRoads.ldf	2007-03-20 14:04:18 UTC (rev 1296)
@@ -33,7 +33,7 @@
                 <SymbolReference>Library://Symbology/Symbols/LineSymbol.SymbolDefinition</SymbolReference>
                 <ScaleX>1</ScaleX>
                 <ScaleY>1</ScaleY>
-                <SizeContext>Device</SizeContext>
+                <SizeContext>DeviceUnits</SizeContext>
                 <DrawLast>False</DrawLast>
                 <CheckExclusionRegion>False</CheckExclusionRegion>
                 <AddToExclusionRegion>False</AddToExclusionRegion>

Modified: trunk/MgDev/UnitTest/TestData/Symbology/symbolp.sd
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/symbolp.sd	2007-03-20 00:08:42 UTC (rev 1295)
+++ trunk/MgDev/UnitTest/TestData/Symbology/symbolp.sd	2007-03-20 14:04:18 UTC (rev 1296)
@@ -23,34 +23,34 @@
         <DefaultValue>FFFFFF00</DefaultValue>
         <DisplayName>X Color</DisplayName>
         <Description>The color of the X thingie that is across the box</Description>
-        <ValueList>
+        <AllowedValues>
           <Value>FFFF0000</Value>
           <Value>FFFFFF00</Value>
           <Value>FF00FF00</Value>
-        </ValueList>
+        </AllowedValues>
       </Parameter>
       <Parameter>
         <Identifier>OUTLINE</Identifier>
         <DefaultValue>FFFF0000</DefaultValue>
         <DisplayName>Outline Color</DisplayName>
         <Description>The color of the outline of the box</Description>
-        <ValueList>
+        <AllowedValues>
           <Value>FFFF0000</Value>
           <Value>FFFFFFFF</Value>
-        </ValueList>
+        </AllowedValues>
       </Parameter>
       <Parameter>
         <Identifier>THICKNESS</Identifier>
         <DefaultValue>-.5</DefaultValue>
         <DisplayName>Line Thickness</DisplayName>
         <Description>The thickness of the line in mm...minus 2 and halved</Description>
-        <ValueList>
+        <AllowedValues>
           <Value>-1</Value>
           <Value>-.5</Value>
           <Value>0</Value>
           <Value>.5</Value>
           <Value>1</Value>
-        </ValueList>
+        </AllowedValues>
       </Parameter>
     </ParameterDefinition>
   </SimpleSymbolDefinition>



More information about the mapguide-commits mailing list