[mapguide-commits] r5050 - in sandbox/maestro-3.0: Maestro Maestro.Base/Editor Maestro.Editors Maestro.Editors/Common Maestro.Editors/LayerDefinition Maestro.Editors/LayerDefinition/Vector Maestro.Editors/LayerDefinition/Vector/Scales Maestro.Editors/LayerDefinition/Vector/StyleEditors Maestro.Editors/LayerDefinition/Vector/Thematics Maestro.Editors/Properties Maestro.Editors/Resources OSGeo.MapGuide.MaestroAPI/ObjectModels

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Fri Jul 23 08:38:06 EDT 2010


Author: jng
Date: 2010-07-23 12:38:06 +0000 (Fri, 23 Jul 2010)
New Revision: 5050

Added:
   sandbox/maestro-3.0/Maestro.Editors/Common/ImageStylePicker.cs
   sandbox/maestro-3.0/Maestro.Editors/Common/ImageStylePicker.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/FeaturePreviewRender.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/Condition.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/Condition.designer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/Condition.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionList.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionList.designer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionList.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionListButtons.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionListButtons.designer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionListButtons.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/EditorTemplateForm.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/EditorTemplateForm.designer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/EditorTemplateForm.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ItemStyle.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ItemStyle.designer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ItemStyle.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRange.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRange.designer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRange.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeConditions.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeConditions.designer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeConditions.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeList.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeList.designer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeList.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/AreaFeatureStyleEditor.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/AreaFeatureStyleEditor.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FillStyleEditor.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FillStyleEditor.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FontStyleEditor.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FontStyleEditor.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineFeatureStyleEditor.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineFeatureStyleEditor.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineStyleEditor.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineStyleEditor.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/PointFeatureStyleEditor.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/PointFeatureStyleEditor.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/ScaleRangeEditor.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/ScaleRangeEditor.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ColorBrewer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ThemeCreator.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ThemeCreator.designer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ThemeCreator.resx
   sandbox/maestro-3.0/Maestro.Editors/Resources/ColorBrewer.csv
   sandbox/maestro-3.0/Maestro.Editors/Resources/CommandTypesDataset.xml
   sandbox/maestro-3.0/Maestro.Editors/Resources/GeometryStyleComboDataset.xml
Removed:
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Geometry/
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Scales/
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Thematics/
Modified:
   sandbox/maestro-3.0/Maestro.Base/Editor/ResourceEditorService.cs
   sandbox/maestro-3.0/Maestro.Editors/IEditorService.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj
   sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx
   sandbox/maestro-3.0/Maestro/Maestro.csproj
   sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSource.cs
   sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerDefinition.cs
   sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/ObjectFactory.cs
Log:
This is the first phase of porting the current layer definition style editor to our sandbox. This targets the 1.0.0 Layer Definition schema and many things are still broken

Modified: sandbox/maestro-3.0/Maestro/Maestro.csproj
===================================================================
--- sandbox/maestro-3.0/Maestro/Maestro.csproj	2010-07-23 01:43:33 UTC (rev 5049)
+++ sandbox/maestro-3.0/Maestro/Maestro.csproj	2010-07-23 12:38:06 UTC (rev 5050)
@@ -73,6 +73,643 @@
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>
     <Content Include="MapGuide Maestro.ico" />
+    <Content Include="WebStudio\areas\Acad_iso02w100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Acad_iso03w100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Acad_iso04w100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Acad_iso05w100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Acad_iso06w100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Acad_iso07w100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Acad_iso08w100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Acad_iso09w100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Acad_iso10w100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Acad_iso11w100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Acad_iso12w100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Acad_iso13w100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Acad_iso14w100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Acad_iso15w100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Angle.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ansi31.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ansi32.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ansi33.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ansi34.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ansi35.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ansi36.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ansi37.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ansi38.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_b816.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_b816c.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_b88.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_brelm.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_brstd.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_conc.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_hbone.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_parq1.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_rroof.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_rroof_90.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_rshke.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_rshke_180.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_rshke_270.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_rshke_90.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Ar_sand.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Box.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Brass.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Brick.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Brstone.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Clay.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Cork.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Cross.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Dash.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Dolmit.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Dots.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Earth.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Escher.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Flex.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Grass.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Grate.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Hex.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Honey.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Hound.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Insul.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Line.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Line_135.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Line_45.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Line_90.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Mudst.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Net.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Net3.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Net_45.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Plast.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Plasti.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Sacncr.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill12.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill13.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill14.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill15.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill16.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill17.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill18.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill19.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill20.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill21.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill22.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill23.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill24.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill25.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill26.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill27.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill28.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill29.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill30.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill31.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill32.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill33.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill34.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill35.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill36.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill37.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill38.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill39.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill40.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill41.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill42.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill43.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill44.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill45.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill46.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill47.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill48.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill49.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill50.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill51.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill52.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill53.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill54.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill55.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill56.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill57.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill58.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill59.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill60.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill61.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill62.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill63.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill64.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill65.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill66.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill67.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill68.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill69.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill70.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Shapefill71.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Solid.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Square.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Stars.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Steel.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Swamp.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Trans.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Triang.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\areas\Zigzag.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\copyright.txt" />
+    <Content Include="WebStudio\lines\ACAD_ISO02W100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\ACAD_ISO03W100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\ACAD_ISO04W100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\ACAD_ISO05W100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\ACAD_ISO06W100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\ACAD_ISO07W100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\ACAD_ISO08W100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\ACAD_ISO09W100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\ACAD_ISO10W100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\ACAD_ISO11W100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\ACAD_ISO12W100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\ACAD_ISO13W100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\ACAD_ISO14W100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\ACAD_ISO15W100.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\BORDER.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\BORDER2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\BORDERX2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\CENTER.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\CENTER2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\CENTERX2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\Dash.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\DashDot.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\DASHDOT2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\DASHDOT3.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\DashDotDot.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\DASHDOTX2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\DASHED.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\DASHED2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\DASHEDX2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\DIVIDE.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\DIVIDE2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\DIVIDEX2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\Dot.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\DOT2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\DOT3.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\DOTX2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\FENCELINE1.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\FENCELINE2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\HIDDEN.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\HIDDEN2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\HIDDENX2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE03.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE04.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE05.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE06.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE07.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE08.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE09.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE10.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE11.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE12.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE13.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE14.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE15.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE16.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE17.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE18.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE19.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE20.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE21.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE22.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE23.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE24.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\LINE25.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\PHANTOM.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\PHANTOM2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\PHANTOMX2.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\Rail.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\Solid.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\lines\TRACKS.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\points\circle.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\points\cross.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\points\square.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\points\star.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\points\triangle.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="WebStudio\points\x.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\Maestro.Base\Maestro.Base.csproj">

Modified: sandbox/maestro-3.0/Maestro.Base/Editor/ResourceEditorService.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Editor/ResourceEditorService.cs	2010-07-23 01:43:33 UTC (rev 5049)
+++ sandbox/maestro-3.0/Maestro.Base/Editor/ResourceEditorService.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -264,5 +264,11 @@
         {
             get { return (IDrawingService)_conn.GetService((int)ServiceType.Drawing); }
         }
+
+        public void HasChanged()
+        {
+            this.IsDirty = true;
+            OnDirtyStateChanged();
+        }
     }
 }

Added: sandbox/maestro-3.0/Maestro.Editors/Common/ImageStylePicker.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Common/ImageStylePicker.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/Common/ImageStylePicker.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,147 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Windows.Forms;
+using System.Drawing;
+
+namespace Maestro.Editors.Common
+{
+	public class ImageStylePicker
+		: CustomCombo
+	{
+		private int m_itemHeight = 20;
+		private int m_textWidth = 40;
+
+		public ImageStylePicker()
+			: base()
+		{
+			if (!this.DesignMode)
+			{
+				base.SetCustomRender(new RenderCustomItem(ImageComboRender));
+				base.ValueMember = "Name";
+				base.DisplayMember = "Name";
+			}
+		}
+
+		public int TextWidth
+		{
+			get { return m_textWidth; }
+			set { m_textWidth = value; }
+		}
+
+		protected override void OnMeasureItem(MeasureItemEventArgs e)
+		{
+			if (e.Index < 0)
+				return;
+
+			Image bmp = this.Items[e.Index] as Image;
+
+			if (bmp == null && this.Items[e.Index] as NamedImage != null)
+				bmp = (this.Items[e.Index] as NamedImage).Image;
+
+			if (bmp != null)
+				e.ItemHeight = m_itemHeight + MARGIN * 3;
+			else
+				base.OnMeasureItem(e);
+		}
+
+		private const int MARGIN = 2;
+
+		private bool ImageComboRender(DrawItemEventArgs e, object value)
+		{
+			Image bmp;
+			string text;
+
+			if (value as NamedImage != null)
+			{
+				bmp = (value as NamedImage).Image;
+				text = (value as NamedImage).Name;
+			}
+			else if (value as Image != null)
+			{
+				bmp = value as Image;
+				text = null;
+			}
+			else 
+				return false;
+
+			e.DrawBackground();
+
+			Color brushcolor = this.Enabled ? this.ForeColor : System.Drawing.SystemColors.GrayText; 
+			int imageWidth = e.Bounds.Width - m_textWidth - MARGIN * 2;
+			//TODO: Apply B/W + dim filter here
+			Rectangle r = new Rectangle(e.Bounds.X + MARGIN + 1, e.Bounds.Y + MARGIN + 1, imageWidth - 1, m_itemHeight - 1);
+			using (Brush b = new TextureBrush(bmp))
+				e.Graphics.FillRectangle(b, r);
+			
+			r = new Rectangle(e.Bounds.X + MARGIN, e.Bounds.Y + MARGIN, imageWidth, m_itemHeight);
+			using(Pen p = new Pen(brushcolor))
+				e.Graphics.DrawRectangle(p, r);
+
+			if (text != null && text.Length > 0)
+			{
+				StringFormat format = new StringFormat();
+				format.Trimming = StringTrimming.EllipsisCharacter;
+				format.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.FitBlackBox;
+
+				int textHeight = (int)e.Graphics.MeasureString(text, this.Font, m_textWidth, format).Height;
+				int centerY = ((e.Bounds.Height - textHeight) / 2) + e.Bounds.Y;
+
+				r = new Rectangle(e.Bounds.X + MARGIN * 2 + imageWidth, centerY, m_textWidth, m_itemHeight);
+				using(Brush b = new SolidBrush(brushcolor))
+					e.Graphics.DrawString(text, this.Font, b, r, format);
+
+				if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
+					e.DrawFocusRectangle();
+			}
+			return true;
+		}
+
+		public class NamedImage
+		{
+			public NamedImage(string name, Image image)
+			{
+				m_name = name;
+				m_image = image;
+			}
+
+			private Image m_image;
+			private string m_name;
+
+			public Image Image
+			{
+				get { return m_image; }
+				set { m_image = value; }
+			}
+
+			public string Name 
+			{
+				get { return m_name; }
+				set { m_name = value; }
+			}
+		}
+
+        internal void Bind(object dataSource, string dataMember)
+        {
+            //We're binding to the name of the image
+            this.DataBindings.Add("Text", dataSource, dataMember);
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/Common/ImageStylePicker.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Common/ImageStylePicker.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/Common/ImageStylePicker.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<root>
+	<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+		<xsd:element name="root" msdata:IsDataSet="true">
+			<xsd:complexType>
+				<xsd:choice maxOccurs="unbounded">
+					<xsd:element name="data">
+						<xsd:complexType>
+							<xsd:sequence>
+								<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+								<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+							</xsd:sequence>
+							<xsd:attribute name="name" type="xsd:string" />
+							<xsd:attribute name="type" type="xsd:string" />
+							<xsd:attribute name="mimetype" type="xsd:string" />
+						</xsd:complexType>
+					</xsd:element>
+					<xsd:element name="resheader">
+						<xsd:complexType>
+							<xsd:sequence>
+								<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+							</xsd:sequence>
+							<xsd:attribute name="name" type="xsd:string" use="required" />
+						</xsd:complexType>
+					</xsd:element>
+				</xsd:choice>
+			</xsd:complexType>
+		</xsd:element>
+	</xsd:schema>
+	<resheader name="ResMimeType">
+		<value>text/microsoft-resx</value>
+	</resheader>
+	<resheader name="Version">
+		<value>1.0.0.0</value>
+	</resheader>
+	<resheader name="Reader">
+		<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+	</resheader>
+	<resheader name="Writer">
+		<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+	</resheader>
+</root>

Modified: sandbox/maestro-3.0/Maestro.Editors/IEditorService.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/IEditorService.cs	2010-07-23 01:43:33 UTC (rev 5049)
+++ sandbox/maestro-3.0/Maestro.Editors/IEditorService.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -181,5 +181,12 @@
         /// </summary>
         /// <returns></returns>
         string GetCoordinateSystem();
+
+        /// <summary>
+        /// Forces the the <see cref="DirtyStateChanged"/> event. Normally the databinding
+        /// system should auto-flag dirty state, only call this if you don't utilise this
+        /// databinding system.
+        /// </summary>
+        void HasChanged();
     }
 }

Copied: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/FeaturePreviewRender.cs (from rev 5035, trunk/Tools/Maestro/Maestro/ResourceEditors/FeaturePreviewRender.cs)
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/FeaturePreviewRender.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/FeaturePreviewRender.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,474 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Drawing;
+using System.Collections;
+using System.Drawing.Imaging;
+using Maestro.Editors.Common;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using System.Collections.Generic;
+using OSGeo.MapGuide.MaestroAPI;
+
+namespace Maestro.Editors.LayerDefinition.Vector
+{
+
+	public class FeaturePreviewRender
+	{
+		private static ImageStylePicker.NamedImage[] m_fillImages = null;
+		private static ImageStylePicker.NamedImage[] m_lineStyles = null;
+
+
+		public static void RenderPreviewArea(Graphics g, Rectangle size, AreaSymbolizationFillType item)
+		{
+			if (item == null)
+			{
+				RenderPreviewFont(g, size, null);
+				return;
+			}
+
+			//Adjust, since painting always excludes top/right and includes left/bottom
+			Rectangle size_adj = new Rectangle(size.X, size.Y, size.Width - 1, size.Height - 1);
+
+			Point[] points = new Point[] 
+			{
+				new Point(size_adj.Left, size_adj.Top),
+				new Point(size_adj.Right, size_adj.Top),
+				new Point(size_adj.Right, size_adj.Bottom),
+				new Point(size_adj.Left, size_adj.Bottom),
+				new Point(size_adj.Left, size_adj.Top)
+			};
+
+			if (item.Fill != null)
+			{
+				Brush b;
+			
+				Image texture = null;
+                foreach (ImageStylePicker.NamedImage img in FillImages)
+                {
+                    if (img.Name == item.Fill.FillPattern)
+                    {
+                        //TODO: Figure out why we can't modify the palette...
+                        //TODO: When using the transparent png's, it might be possible to paint it usign only the alpha channel mask
+                        /*Image bmp = (Image)img.Image.Clone();
+                        for(int i = 0; i < bmp.Palette.Entries.Length; i++)
+                            if (bmp.Palette.Entries[i].R == Color.Black.R && bmp.Palette.Entries[i].B == Color.Black.B && bmp.Palette.Entries[i].G == Color.Black.G)
+                                bmp.Palette.Entries[i] = item.Fill.ForegroundColor;
+                            else if (bmp.Palette.Entries[i].R == Color.White.R && bmp.Palette.Entries[i].B == Color.White.B && bmp.Palette.Entries[i].G == Color.White.G)
+                                bmp.Palette.Entries[i] = item.Fill.BackgroundColor;
+                        */
+
+                        //Until the above is resolved, this is a VERY slow way to do it, even with app. 200 pixels
+                        //Unfortunately I don't want "unsafe" code here...
+                        Bitmap bmp = new Bitmap(img.Image);
+                        for (int y = 0; y < bmp.Height; y++)
+                            for (int x = 0; x < bmp.Width; x++)
+                            {
+                                Color c = bmp.GetPixel(x, y);
+
+                                if (c.A > 0x7F /*&& c.R == Color.Black.R && c.B == Color.Black.B && c.G == Color.Black.G*/)
+                                    bmp.SetPixel(x, y, Utility.ParseHTMLColor(item.Fill.ForegroundColor));
+                                else //if (c.R == Color.White.R && c.B == Color.White.B && c.G == Color.White.G)
+                                    bmp.SetPixel(x, y, Utility.ParseHTMLColor(item.Fill.BackgroundColor));
+                            }
+
+
+                        texture = bmp;
+                        break;
+                    }
+                }
+			
+				if (texture == null)
+					b = new SolidBrush(Utility.ParseHTMLColor(item.Fill.BackgroundColor));
+				else
+					b = new TextureBrush(texture);
+			
+				g.FillPolygon(b, points);
+				b.Dispose();
+			}
+
+			if (item.Stroke != null && !string.IsNullOrEmpty(item.Stroke.Color))
+			{
+                var c = Utility.ParseHTMLColor(item.Stroke.Color);
+                using (Pen p = new Pen(c, /*float.Parse(item.Stroke.Thickness)*/ 1)) //TODO: Calculate appropriate thickness
+					g.DrawPolygon(p, points); //TODO: Implement line dash
+			}
+
+		}
+
+		public static void RenderPreviewLine(Graphics g, Rectangle size, IEnumerable<StrokeType> item)
+		{
+			if (item == null)
+			{
+				RenderPreviewFont(g, size, null);
+				return;
+			}
+
+            try
+            {
+                //TODO: Implement line dash
+                foreach (StrokeType st in item)
+                {
+                    using (Pen p = new Pen(string.IsNullOrEmpty(st.Color) ? Color.White : Utility.ParseHTMLColor(st.Color), /*float.Parse(st.Thickness)*/ 1)) //TODO: Calculate appropriate thickness
+                    {
+                        g.DrawLine(p, new Point(size.Left, size.Top + (size.Height / 2)), new Point(size.Right, size.Top + (size.Height / 2)));
+                    }
+                }
+            }
+            catch
+            {
+            }
+		}
+
+		public static void RenderPreviewFont(Graphics g, Rectangle size, TextSymbolType item)
+		{
+			Font font;
+			Color foreground;
+			Color background;
+			string text = "";
+            BackgroundStyleType bgStyle;
+            
+
+			if (item == null || item.FontName == null)
+			{
+				font = new Font("Arial", 12);
+				foreground = Color.Black;
+				background = Color.White;
+				text = Properties.Resources.EmptyText;
+                bgStyle = BackgroundStyleType.Transparent;
+			}
+			else
+			{
+				try { font = new Font(item.FontName, 12); }
+				catch { font = new Font("Arial", 12); }
+				foreground = Utility.ParseHTMLColor(item.ForegroundColor);
+				background = Utility.ParseHTMLColor(item.BackgroundColor);
+                bgStyle = item.BackgroundStyle;
+
+				FontStyle fs = FontStyle.Regular;
+				if (item.Bold == "true")
+					fs |= FontStyle.Bold;
+				if (item.Italic == "true")
+					fs |= FontStyle.Italic;
+				if (item.Underlined == "true")
+					fs |= FontStyle.Underline;
+				font = new Font(font, fs);
+
+				text = item.Text;
+			}
+
+            if (bgStyle == BackgroundStyleType.Ghosted)
+            {
+                using (System.Drawing.Drawing2D.GraphicsPath pth = new System.Drawing.Drawing2D.GraphicsPath())
+                {
+                    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
+                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
+
+                    pth.AddString(text, font.FontFamily, (int)font.Style, font.Size * 1.25f, size.Location, StringFormat.GenericDefault);
+
+                    using (Pen p = new Pen(background, 1.5f))
+                        g.DrawPath(p, pth);
+
+                    using (Brush b = new SolidBrush(foreground))
+                        g.FillPath(b, pth);
+                }
+            }
+            else
+            {
+                if (bgStyle == BackgroundStyleType.Opaque)
+                {
+                    SizeF bgSize = g.MeasureString(text, font, new SizeF(size.Width, size.Height));
+                    using (Brush b = new SolidBrush(background))
+                        g.FillRectangle(b, new Rectangle(size.Top, size.Left, (int)bgSize.Width, (int)bgSize.Height));
+                }
+
+                using (Brush b = new SolidBrush(foreground))
+                    g.DrawString(text, font, b, size);
+            }
+		}
+
+		public static void RenderPreviewFontSymbol(Graphics g, Rectangle size, FontSymbolType item)
+		{
+			Font font;
+			Color foreground;
+			string text = "";
+
+            if (item == null || item.FontName == null)
+            {
+                RenderPreviewFont(g, size, null);
+                return;
+            }
+            else
+            {
+                try { font = new Font(item.FontName, 12); }
+                catch { font = new Font("Arial", 12); }
+
+                if (string.IsNullOrEmpty(item.ForegroundColor))
+                    foreground = Color.Black;
+                else
+                    foreground = Utility.ParseHTMLColor(item.ForegroundColor);
+
+                FontStyle fs = FontStyle.Regular;
+                if (item.Bold == true && item.BoldSpecified)
+                    fs |= FontStyle.Bold;
+                if (item.Italic == true && item.ItalicSpecified)
+                    fs |= FontStyle.Italic;
+                if (item.Underlined == true && item.UnderlinedSpecified)
+                    fs |= FontStyle.Underline;
+                font = new Font(font, fs);
+
+                text = item.Character;
+            }
+
+            SizeF textSize = g.MeasureString(text, font);
+
+            PointF center = new PointF((size.Width - textSize.Width) / 2, (size.Height - textSize.Height) / 2);
+
+			using (Brush b = new SolidBrush(foreground))
+				g.DrawString(text, font, b, center);
+		}
+
+		public static void RenderPreviewPoint(Graphics g, Rectangle size, MarkSymbolType item)
+		{
+			if (item == null)
+			{
+				RenderPreviewFont(g, size, null);
+				return;
+			}
+
+			//Adjust, since painting always excludes top/right and includes left/bottom
+			Rectangle size_adj = new Rectangle(size.X, size.Y, size.Width - 1, size.Height - 1);
+
+			Point[] points = null;
+
+            int radius = Math.Min(size_adj.Width / 2, size_adj.Height / 2);
+            int npoints = Math.Min(Math.Max(15, radius / 5), 100);
+            Point center = new Point(size_adj.X + size_adj.Width / 2, size_adj.Y + size_adj.Height / 2);
+
+            switch(item.Shape)
+			{
+                case ShapeType.Square:
+                    points = Rotate(CreateNGon(center, radius, 4), center, Math.PI / 4);
+                    break;
+                case ShapeType.Star:
+                    Point[] outerStar = Rotate(CreateNGon(center, radius, 5), center, -Math.PI / 2);
+                    Point[] innerStar = Rotate(Rotate(CreateNGon(center, radius / 2, 5), center, -Math.PI / 2), center, Math.PI / 5);
+                    points = new Point[outerStar.Length + innerStar.Length];
+                    for (int i = 0; i < points.Length; i++)
+                        points[i] = i % 2 == 0 ? outerStar[i >> 1] : innerStar[i >> 1];
+                    //points = innerStar;
+                    break;
+                case ShapeType.Triangle:
+                    points = Rotate(CreateNGon(center, radius, 3), center, Math.PI / 6);
+                    break;
+                case ShapeType.Cross:
+                case ShapeType.X:
+                    Point[] outerCross = Rotate(CreateNGon(center, radius, 4), center, -Math.PI / 2);
+                    Point[] innerCross = Rotate(Rotate(CreateNGon(center, radius / 2, 4), center, -Math.PI / 2), center, Math.PI / 4);
+                    points = new Point[13];
+                    points[0] = new Point(innerCross[0].X, outerCross[0].Y);
+                    points[1] = innerCross[0];
+                    points[2] = new Point(outerCross[1].X, innerCross[0].Y);
+                    points[3] = new Point(outerCross[1].X, innerCross[1].Y);
+                    points[4] = innerCross[1];
+                    points[5] = new Point(innerCross[1].X, outerCross[2].Y);
+                    points[6] = new Point(innerCross[2].X, outerCross[2].Y);
+                    points[7] = innerCross[2];
+                    points[8] = new Point(outerCross[3].X, innerCross[2].Y);
+                    points[9] = new Point(outerCross[3].X, innerCross[3].Y);
+                    points[10] = innerCross[3];
+                    points[11] = new Point(innerCross[3].X, outerCross[0].Y);
+                    points[12] = new Point(innerCross[0].X, outerCross[0].Y);
+
+                    if (item.Shape == ShapeType.X)
+                        points = Rotate(points, center, Math.PI / 4);
+                    break;
+				default: //Circle
+				{
+                    points = CreateNGon(center, radius, Math.Min(Math.Max(15, radius / 5), 100));
+					break;
+				}				
+			}
+
+			if (item.Fill != null)
+			{
+				Brush b;
+			
+				Image texture = null;
+                foreach (ImageStylePicker.NamedImage img in FillImages)
+                {
+                    if (img.Name == item.Fill.FillPattern)
+                    {
+                        //TODO: Figure out why we can't modify the palette...
+                        /*Image bmp = (Image)img.Image.Clone();
+                        for(int i = 0; i < bmp.Palette.Entries.Length; i++)
+                            if (bmp.Palette.Entries[i].R == Color.Black.R && bmp.Palette.Entries[i].B == Color.Black.B && bmp.Palette.Entries[i].G == Color.Black.G)
+                                bmp.Palette.Entries[i] = item.Fill.ForegroundColor;
+                            else if (bmp.Palette.Entries[i].R == Color.White.R && bmp.Palette.Entries[i].B == Color.White.B && bmp.Palette.Entries[i].G == Color.White.G)
+                                bmp.Palette.Entries[i] = item.Fill.BackgroundColor;
+                        */
+
+                        //Until the above is resolved, this is a VERY slow way to do it, even with app. 200 pixels
+                        //Unfortunately I don't want "unsafe" code here...
+                        Bitmap bmp = new Bitmap(img.Image);
+                        for (int y = 0; y < bmp.Height; y++)
+                            for (int x = 0; x < bmp.Width; x++)
+                            {
+                                Color c = bmp.GetPixel(x, y);
+
+                                if (c.R == Color.Black.R && c.B == Color.Black.B && c.G == Color.Black.G)
+                                    bmp.SetPixel(x, y, Utility.ParseHTMLColor(item.Fill.ForegroundColor));
+                                else if (c.R == Color.White.R && c.B == Color.White.B && c.G == Color.White.G)
+                                    bmp.SetPixel(x, y, Utility.ParseHTMLColor(item.Fill.BackgroundColor));
+                            }
+
+
+                        texture = bmp;
+                        break;
+                    }
+                }
+
+				if (texture == null)
+					b = new SolidBrush(Utility.ParseHTMLColor(item.Fill.BackgroundColor));
+				else
+					b = new TextureBrush(texture);
+			
+				g.FillPolygon(b, points);
+				b.Dispose();
+			}
+
+			if (item.Edge != null)
+			{
+				using(Pen p = new Pen(string.IsNullOrEmpty(item.Edge.Color) ? Color.White : Utility.ParseHTMLColor(item.Edge.Color), /* float.Parse(item.Edge.Thickness) */ 1)) //TODO: Calculate appropriate thickness
+					g.DrawPolygon(p, points); //TODO: Implement line dash
+			}
+		
+		}
+
+        public static Point[] Rotate(Point[] points, Point center, double radians)
+        {
+            double sin = Math.Sin(radians);
+            double cos = Math.Cos(radians);
+
+            Point[] res = new Point[points.Length];
+            for (int i = 0; i < points.Length; i++)
+            {
+                int x = points[i].X - center.X;
+                int y = points[i].Y - center.Y;
+                res[i] = new Point(
+                    center.X + (int)((x * cos) - (y * sin)),
+                    center.Y + (int)((y * cos) + (x * sin))
+                );
+            }
+            return res;
+        }
+
+        public static Point[] CreateNGon(Point center, int radius, int npoints)
+        {
+            double interval = (2 * Math.PI) / (double)npoints;
+
+            Point[] points = new Point[npoints + 1];
+            for (int i = 0; i < npoints; i++)
+            {
+                double angle = interval * i;
+                points[i] = new Point((int)Math.Round(center.X + Math.Cos(angle) * radius), (int)Math.Round(center.Y + Math.Sin(angle) * radius));
+            }
+
+            //Close the polygon
+            points[points.Length - 1] = points[0];
+
+            return points;
+        }
+
+		public static ImageStylePicker.NamedImage[] FillImages
+		{
+			get
+			{
+				if (m_fillImages == null)
+					m_fillImages = ReadImagesFromDisk("WebStudio" + System.IO.Path.DirectorySeparatorChar.ToString() + "areas"); //typeof(GeometryStyleEditors.ImageStylePicker).Namespace + ".Fillstyles");
+				return m_fillImages;
+			}
+		}
+
+		public static ImageStylePicker.NamedImage[] LineStyles
+		{
+			get
+			{
+				if (m_lineStyles  == null)
+					m_lineStyles = ReadImagesFromDisk("WebStudio" + System.IO.Path.DirectorySeparatorChar.ToString() + "lines");  //typeof(GeometryStyleEditors.ImageStylePicker).Namespace + ".Linestyles");
+				return m_lineStyles;
+			}
+		}
+
+		private static ImageStylePicker.NamedImage[] ReadImagesFromDisk(string folderpath)
+		{
+			string path = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, folderpath);
+			if (!System.IO.Directory.Exists(path))
+				return new ImageStylePicker.NamedImage[0];
+
+			string[] filenames = System.IO.Directory.GetFiles(path, "*.png");
+			ArrayList lst = new ArrayList();
+			foreach(string s in filenames)
+			{
+				Image img = Image.FromFile(s);
+				//For some odd reason these have borders around
+				if (img.Width == 120 && img.Height == 20)
+				{
+					Bitmap bmp = new Bitmap(115, 18);
+					using (Graphics g = Graphics.FromImage(bmp))
+					{
+						g.Clear(Color.Transparent);
+						g.DrawImage(img, new Rectangle(new Point(0,0), bmp.Size), new Rectangle(2, 1, 115, 18), GraphicsUnit.Pixel);
+					}
+					img = bmp;
+				}
+
+				lst.Add(
+					new ImageStylePicker.NamedImage
+					(System.IO.Path.GetFileNameWithoutExtension(s), img)
+					);
+			}
+			return (ImageStylePicker.NamedImage[])lst.ToArray(typeof(ImageStylePicker.NamedImage));
+		}
+
+		/*private static GeometryStyleEditors.ImageStylePicker.NamedImage[] ReadImages(string assemblypath)
+		{
+			SortedList lst = new SortedList();
+			System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
+			string itemnamespace = assemblypath;
+			foreach(string s in asm.GetManifestResourceNames())
+				if (s.StartsWith(itemnamespace) && s.ToLower().EndsWith(".gif"))
+				{
+					Image img = Bitmap.FromStream(asm.GetManifestResourceStream(s));
+					string imagename = s.Substring(itemnamespace.Length + 1, s.LastIndexOf(".") - itemnamespace.Length - 1); 
+					string index = imagename.Substring(0, imagename.IndexOf("."));
+					imagename = imagename.Substring(index.Length + 1);
+
+					lst.Add(index, new GeometryStyleEditors.ImageStylePicker.NamedImage(imagename, img));
+				}
+
+			GeometryStyleEditors.ImageStylePicker.NamedImage[] retval = new GeometryStyleEditors.ImageStylePicker.NamedImage[lst.Count];
+			int i = 0;
+			foreach(GeometryStyleEditors.ImageStylePicker.NamedImage nm in lst.Values)
+				retval[i++] = nm;
+
+			return retval;
+		}*/
+	}
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/Condition.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/Condition.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/Condition.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,213 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+
+namespace Maestro.Editors.LayerDefinition.Vector.Scales
+{
+    public partial class Condition : UserControl
+    {
+        private PointRuleType m_prt;
+        private LineRuleType m_lrt;
+        private AreaRuleType m_art;
+        private bool m_isUpdating = false;
+
+        public event EventHandler ItemDeleted;
+        public event EventHandler ItemChanged;
+
+        private VectorLayerEditorCtrl m_owner;
+
+        public VectorLayerEditorCtrl Owner
+        {
+            get { return m_owner; }
+            set
+            {
+                m_owner = value;
+                FeatureStyle.Owner = m_owner;
+                LabelStyle.Owner = m_owner;
+            }
+        }
+
+        public Condition()
+        {
+            InitializeComponent();
+        }
+
+        public void SetItem(PointRuleType prt)
+        {
+            SetItemInternal(prt);
+        }
+
+        public void SetItem(LineRuleType lrt)
+        {
+            SetItemInternal(lrt);
+        }
+
+        public void SetItem(AreaRuleType art)
+        {
+            SetItemInternal(art);
+        }
+
+        private void SetItemInternal(object item)
+        {
+            m_prt = item as PointRuleType;
+            m_lrt = item as LineRuleType;
+            m_art = item as AreaRuleType;
+
+            try
+            {
+                m_isUpdating = true;
+                if (m_prt != null)
+                {
+                    RuleCondition.Text = m_prt.Filter;
+                    LegendLabel.Text = m_prt.LegendLabel;
+                    FeatureStyle.SetItem(m_prt, m_prt.Item);
+                    LabelStyle.SetItem(m_prt, m_prt.Label);
+                }
+                else if (m_lrt != null)
+                {
+                    RuleCondition.Text = m_lrt.Filter;
+                    LegendLabel.Text = m_lrt.LegendLabel;
+                    FeatureStyle.SetItem(m_lrt, m_lrt.Items);
+                    LabelStyle.SetItem(m_lrt, m_lrt.Label);
+                }
+                else if (m_art != null)
+                {
+                    RuleCondition.Text = m_art.Filter;
+                    LegendLabel.Text = m_art.LegendLabel;
+                    FeatureStyle.SetItem(m_art, m_art.Item);
+                    LabelStyle.SetItem(m_art, m_art.Label);
+                }
+            }
+            finally
+            {
+                m_isUpdating = false;
+            }
+        }
+
+        public object Item
+        {
+            get
+            {
+                if (m_prt != null)
+                    return m_prt;
+                else if (m_lrt != null)
+                    return m_lrt;
+                else if (m_art != null)
+                    return m_art;
+                else
+                    return null;
+            }
+        }
+
+        private void DeleteButton_Click(object sender, EventArgs e)
+        {
+            if (ItemDeleted != null)
+                if (m_prt != null)
+                    ItemDeleted(m_prt, null);
+                else if (m_lrt != null)
+                    ItemDeleted(m_lrt, null);
+                else if (m_art != null)
+                    ItemDeleted(m_art, null);
+        }
+
+        private void RuleCondition_TextChanged(object sender, EventArgs e)
+        {
+            if (m_isUpdating)
+                return;
+
+            if (m_prt != null)
+                m_prt.Filter = RuleCondition.Text;
+            else if (m_lrt != null)
+                m_lrt.Filter = RuleCondition.Text;
+            else if (m_art != null)
+                m_art.Filter = RuleCondition.Text;
+
+            SignalChanged();
+        }
+
+        private void EditFilter_Click(object sender, EventArgs e)
+        {
+            string tmp = m_owner.EditExpression(RuleCondition.Text);
+            if (tmp != null)
+                RuleCondition.Text = tmp;
+        }
+
+        private void LegendLabel_TextChanged(object sender, EventArgs e)
+        {
+            if (m_isUpdating)
+                return;
+
+            if (m_prt != null)
+                m_prt.LegendLabel = LegendLabel.Text;
+            else if (m_lrt != null)
+                m_lrt.LegendLabel = LegendLabel.Text;
+            else if (m_art != null)
+                m_art.LegendLabel = LegendLabel.Text;
+
+            SignalChanged();
+        }
+
+        private void SignalChanged()
+        {
+            if (m_isUpdating)
+                return;
+
+            if (m_prt != null)
+            {
+                if (ItemChanged != null)
+                    ItemChanged(m_prt, null);
+            }
+            else if (m_lrt != null)
+            {
+                if (ItemChanged != null)
+                    ItemChanged(m_lrt, null);
+            }
+            else if (m_art != null)
+            {
+                if (ItemChanged != null)
+                    ItemChanged(m_art, null);
+            }
+        }
+
+        private void LabelStyle_ItemChanged(object sender, EventArgs e)
+        {
+            SignalChanged();
+        }
+
+        private void FeatureStyle_ItemChanged(object sender, EventArgs e)
+        {
+            SignalChanged();
+        }
+
+        private void FeatureStyle_Click(object sender, EventArgs e)
+        {
+            this.Focus();
+        }
+
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/Condition.designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/Condition.designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/Condition.designer.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,111 @@
+namespace Maestro.Editors.LayerDefinition.Vector.Scales
+{
+    partial class Condition
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Condition));
+            this.RuleCondition = new System.Windows.Forms.TextBox();
+            this.LegendLabel = new System.Windows.Forms.TextBox();
+            this.EditFilter = new System.Windows.Forms.Button();
+            this.DeleteButton = new System.Windows.Forms.Button();
+            this.LabelStyle = new ItemStyle();
+            this.FeatureStyle = new ItemStyle();
+            this.SuspendLayout();
+            // 
+            // RuleCondition
+            // 
+            resources.ApplyResources(this.RuleCondition, "RuleCondition");
+            this.RuleCondition.Name = "RuleCondition";
+            this.RuleCondition.TextChanged += new System.EventHandler(this.RuleCondition_TextChanged);
+            // 
+            // LegendLabel
+            // 
+            resources.ApplyResources(this.LegendLabel, "LegendLabel");
+            this.LegendLabel.Name = "LegendLabel";
+            this.LegendLabel.TextChanged += new System.EventHandler(this.LegendLabel_TextChanged);
+            // 
+            // EditFilter
+            // 
+            resources.ApplyResources(this.EditFilter, "EditFilter");
+            this.EditFilter.Name = "EditFilter";
+            this.EditFilter.UseVisualStyleBackColor = true;
+            this.EditFilter.Click += new System.EventHandler(this.EditFilter_Click);
+            // 
+            // DeleteButton
+            // 
+            resources.ApplyResources(this.DeleteButton, "DeleteButton");
+            this.DeleteButton.Name = "DeleteButton";
+            this.DeleteButton.UseVisualStyleBackColor = true;
+            this.DeleteButton.Click += new System.EventHandler(this.DeleteButton_Click);
+            // 
+            // LabelStyle
+            // 
+            resources.ApplyResources(this.LabelStyle, "LabelStyle");
+            this.LabelStyle.Name = "LabelStyle";
+            this.LabelStyle.Owner = null;
+            this.LabelStyle.DoubleClick += new System.EventHandler(this.FeatureStyle_Click);
+            this.LabelStyle.Click += new System.EventHandler(this.FeatureStyle_Click);
+            this.LabelStyle.ItemChanged += new System.EventHandler(this.LabelStyle_ItemChanged);
+            // 
+            // FeatureStyle
+            // 
+            resources.ApplyResources(this.FeatureStyle, "FeatureStyle");
+            this.FeatureStyle.Name = "FeatureStyle";
+            this.FeatureStyle.Owner = null;
+            this.FeatureStyle.DoubleClick += new System.EventHandler(this.FeatureStyle_Click);
+            this.FeatureStyle.Click += new System.EventHandler(this.FeatureStyle_Click);
+            this.FeatureStyle.ItemChanged += new System.EventHandler(this.FeatureStyle_ItemChanged);
+            // 
+            // Condition
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.DeleteButton);
+            this.Controls.Add(this.EditFilter);
+            this.Controls.Add(this.LegendLabel);
+            this.Controls.Add(this.RuleCondition);
+            this.Controls.Add(this.LabelStyle);
+            this.Controls.Add(this.FeatureStyle);
+            this.MaximumSize = new System.Drawing.Size(0, 20);
+            this.MinimumSize = new System.Drawing.Size(577, 23);
+            this.Name = "Condition";
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private ItemStyle FeatureStyle;
+        private ItemStyle LabelStyle;
+        private System.Windows.Forms.TextBox RuleCondition;
+        private System.Windows.Forms.TextBox LegendLabel;
+        private System.Windows.Forms.Button EditFilter;
+        private System.Windows.Forms.Button DeleteButton;
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/Condition.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/Condition.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/Condition.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="RuleCondition.Location" type="System.Drawing.Point, System.Drawing">
+    <value>33, 1</value>
+  </data>
+  <data name="RuleCondition.Size" type="System.Drawing.Size, System.Drawing">
+    <value>110, 20</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="RuleCondition.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;RuleCondition.Name" xml:space="preserve">
+    <value>RuleCondition</value>
+  </data>
+  <data name="&gt;&gt;RuleCondition.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;RuleCondition.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;RuleCondition.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="LegendLabel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>169, 1</value>
+  </data>
+  <data name="LegendLabel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>134, 20</value>
+  </data>
+  <data name="LegendLabel.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;LegendLabel.Name" xml:space="preserve">
+    <value>LegendLabel</value>
+  </data>
+  <data name="&gt;&gt;LegendLabel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;LegendLabel.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;LegendLabel.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="EditFilter.Location" type="System.Drawing.Point, System.Drawing">
+    <value>143, 1</value>
+  </data>
+  <data name="EditFilter.Size" type="System.Drawing.Size, System.Drawing">
+    <value>24, 20</value>
+  </data>
+  <data name="EditFilter.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="EditFilter.Text" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="&gt;&gt;EditFilter.Name" xml:space="preserve">
+    <value>EditFilter</value>
+  </data>
+  <data name="&gt;&gt;EditFilter.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;EditFilter.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;EditFilter.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="DeleteButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAd9JREFUOE+NU99L
+        U2EY9m8JulhjUhObmswfEROUViLCQIRIhzVdi1pjTRwGyw3B6QibgwoJgi7zJqirrsQLQRBsdVGLmF6E
+        Z5st/NE6T+d5xybH49QPHnjP8z7fc973+96vrq7GeucexNueTgHjWjoD/6apHsv9PciEH2FrNib4Pv5A
+        uNc2S22jDyE/Pl4xiTi/kMCfV0nsLqYExRfzUOZnkPF78L7ZAmoNf166bMLPe8P4Pf0ESETxLzWnw8Hc
+        FHaiE/hxZxDU6gxY9pduOwohH0qRx1DjkaoJknGJyamTfuQDo0g7WvTtfNLK2uxzYP/hiIgQC1dNKpuF
+        03JF7y1kb14F90gVPOH1Niu2NZJJRatCeTpuxGQAStCLX/eHRMs9cju8Jn7sOW3Yfvkcpy1ldQWKownp
+        DqtcsRh867ooJE/6tGUwYBkbmhsNCrd7kYsGkZudKOOZHmyNLVBbbYHnwAPJXmvE/g0b1IFWwN0GjNkP
+        cVeL3e2SY6vUVg+RBrxGtpFzNqA0cAmq2wp4GnQgxxw11BqmksPBxI7LgtKwCX+956D6zgsYk2OOGsMg
+        sQqOJxNfr1+A4jJjd6S8kWBM7nOXRTTHjnJlNFka38SawyxmBGNyJz6mo4/jrM/5P2ymCdXdB/AVAAAA
+        AElFTkSuQmCC
+</value>
+  </data>
+  <data name="DeleteButton.Location" type="System.Drawing.Point, System.Drawing">
+    <value>1, 1</value>
+  </data>
+  <data name="DeleteButton.Size" type="System.Drawing.Size, System.Drawing">
+    <value>32, 20</value>
+  </data>
+  <data name="DeleteButton.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="&gt;&gt;DeleteButton.Name" xml:space="preserve">
+    <value>DeleteButton</value>
+  </data>
+  <data name="&gt;&gt;DeleteButton.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;DeleteButton.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;DeleteButton.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="LabelStyle.Location" type="System.Drawing.Point, System.Drawing">
+    <value>441, 1</value>
+  </data>
+  <data name="LabelStyle.Size" type="System.Drawing.Size, System.Drawing">
+    <value>134, 20</value>
+  </data>
+  <data name="LabelStyle.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;LabelStyle.Name" xml:space="preserve">
+    <value>LabelStyle</value>
+  </data>
+  <data name="&gt;&gt;LabelStyle.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.LayerEditorControls.ScaleControls.ItemStyle, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4347, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;LabelStyle.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;LabelStyle.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="FeatureStyle.Location" type="System.Drawing.Point, System.Drawing">
+    <value>305, 1</value>
+  </data>
+  <data name="FeatureStyle.Size" type="System.Drawing.Size, System.Drawing">
+    <value>134, 20</value>
+  </data>
+  <data name="FeatureStyle.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;FeatureStyle.Name" xml:space="preserve">
+    <value>FeatureStyle</value>
+  </data>
+  <data name="&gt;&gt;FeatureStyle.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.LayerEditorControls.ScaleControls.ItemStyle, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4347, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;FeatureStyle.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;FeatureStyle.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>577, 23</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>Condition</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionList.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionList.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionList.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,295 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+
+namespace Maestro.Editors.LayerDefinition.Vector.Scales
+{
+    public partial class ConditionList : UserControl
+    {
+        private PointTypeStyleType m_point;
+        private LineTypeStyleType m_line;
+        private AreaTypeStyleType m_area;
+
+        private VectorScaleRangeType m_parent;
+        private object m_selectedItem;
+
+        public event EventHandler SelectionChanged;
+        public event EventHandler ItemChanged;
+
+        private VectorLayerEditorCtrl m_owner;
+
+        public VectorLayerEditorCtrl Owner
+        {
+            get { return m_owner; }
+            set
+            {
+                m_owner = value;
+                foreach (Condition c in this.Controls)
+                    c.Owner = m_owner; ;
+            }
+        }
+
+        public ConditionList()
+        {
+            InitializeComponent();
+        }
+
+        public void SetItem(VectorScaleRangeType parent, PointTypeStyleType point)
+        {
+            SetItemInternal(parent, point);
+        }
+
+        public void SetItem(VectorScaleRangeType parent, LineTypeStyleType line)
+        {
+            SetItemInternal(parent, line);
+        }
+
+        public void SetItem(VectorScaleRangeType parent, AreaTypeStyleType area)
+        {
+            SetItemInternal(parent, area);
+        }
+
+        public object SelectedItem 
+        { 
+            get { return m_selectedItem; }
+            set
+            {
+                m_selectedItem = value;
+                if (m_selectedItem != null)
+                {
+                    foreach (Condition c in this.Controls)
+                        if (c.Item == m_selectedItem)
+                        {
+                            c.Focus();
+                            return;
+                        }
+                }
+            }
+        }
+
+        private void SetItemInternal(VectorScaleRangeType parent, object item)
+        {
+            m_parent = parent;
+            m_point = item as PointTypeStyleType;
+            m_line = item as LineTypeStyleType;
+            m_area = item as AreaTypeStyleType;
+
+            this.Controls.Clear();
+
+            try
+            {
+                this.Visible = false;
+                this.SuspendLayout();
+
+                if (m_point != null)
+                {
+                    if (m_point.PointRule != null)
+                        foreach (PointRuleType prt in m_point.PointRule)
+                            AddRuleControl(prt);
+                }
+                else if (m_line != null)
+                {
+                    if (m_line.LineRule != null)
+                        foreach (LineRuleType lrt in m_line.LineRule)
+                            AddRuleControl(lrt);
+                }
+                else if (m_area != null)
+                {
+                    if (m_area != null)
+                        if (m_area.AreaRule != null)
+                            foreach (AreaRuleType art in m_area.AreaRule)
+                                AddRuleControl(art);
+                }
+            }
+            finally
+            {
+                this.ResumeLayout();
+                this.Visible = true;
+            }
+        }
+
+        public Condition AddRuleControl(object rule)
+        {
+            if (rule == null)
+                return null;
+
+            Condition c = new Condition();
+
+            if (rule as PointRuleType != null)
+                c.SetItem(rule as PointRuleType);
+            else if (rule as LineRuleType != null)
+                c.SetItem(rule as LineRuleType);
+            else if (rule as AreaRuleType != null)
+                c.SetItem(rule as AreaRuleType);
+
+            c.Owner = m_owner;
+            c.Dock = DockStyle.Top;
+            this.Controls.Add(c);
+            c.BringToFront();
+            c.ItemChanged += new EventHandler(Rule_ItemChanged);
+            c.ItemDeleted += new EventHandler(Rule_ItemDeleted);
+            c.Enter += new EventHandler(Rule_Enter);
+            c.Leave += new EventHandler(Rule_Leave);
+            return c;
+        }
+
+        private void Rule_Leave(object sender, EventArgs e)
+        {
+            Condition c = sender as Condition;
+            if (c == null)
+                return;
+
+            c.BorderStyle = BorderStyle.None;
+           
+            m_selectedItem = null;
+            if (SelectionChanged != null)
+                SelectionChanged(this, null);
+        }
+
+        private void Rule_Enter(object sender, EventArgs e)
+        {
+            Condition c = sender as Condition;
+            if (c == null)
+                return;
+
+            c.BorderStyle = BorderStyle.FixedSingle;
+            m_selectedItem = c.Item;
+            if (SelectionChanged != null)
+                SelectionChanged(this, null);
+        }
+
+        private void SignalItemChanged()
+        {
+            if (ItemChanged != null)
+                if (m_point != null)
+                    ItemChanged(m_point, null);
+                else if (m_line != null)
+                    ItemChanged(m_line, null);
+                else if (m_area != null)
+                    ItemChanged(m_area, null);
+        }
+
+        void Rule_ItemChanged(object sender, EventArgs e)
+        {
+            SignalItemChanged();
+        }
+
+        void Rule_ItemDeleted(object sender, EventArgs e)
+        {
+            foreach (Condition c in this.Controls)
+                if (c.Item == sender)
+                {
+                    this.Controls.Remove(c);
+                    break;
+                }
+
+            if (m_point != null)
+            {
+                for (int i = 0; i < m_point.PointRule.Count; i++)
+                    if (m_point.PointRule[i] == sender)
+                    {
+                        m_point.PointRule.RemoveAt(i);
+                        break;
+                    }
+            }
+            else if (m_line != null)
+            {
+                for (int i = 0; i < m_line.LineRule.Count; i++)
+                    if (m_line.LineRule[i] == sender)
+                    {
+                        m_line.LineRule.RemoveAt(i);
+                        break;
+                    }
+            }
+            else if (m_area != null)
+            {
+                for (int i = 0; i < m_area.AreaRule.Count; i++)
+                    if (m_area.AreaRule[i] == sender)
+                    {
+                        m_area.AreaRule.RemoveAt(i);
+                        break;
+                    }
+            }
+
+            SignalItemChanged();
+            
+        }
+
+        public void MoveSelectedRule(bool down)
+        {
+            if (this.SelectedItem == null)
+                return;
+
+            Condition selectedControl = null;
+            object selectedRule = this.SelectedItem;
+
+            foreach (Condition c in this.Controls)
+                if (c.Item == this.SelectedItem)
+                {
+                    selectedControl = c;
+                    break;
+                }
+
+            if (selectedControl == null)
+                return;
+
+            int pos = this.Controls.GetChildIndex(selectedControl);
+            if ((down && pos > 0) || (!down && pos < this.Controls.Count - 1))
+            {
+                this.Controls.SetChildIndex(selectedControl, pos + (down ? -1 : 1));
+
+                System.Collections.IList ic = null;
+                if (m_point != null)
+                    ic = m_point.PointRule;
+                else if (m_line != null)
+                    ic = m_line.LineRule;
+                else if (m_area != null)
+                    ic = m_area.AreaRule;
+
+                pos = ic.IndexOf(selectedRule);
+                if ((!down && pos > 0) || (down && pos < ic.Count - 1 && pos > 0))
+                {
+                    ic.RemoveAt(pos);
+                    ic.Insert(pos + (down ? 1 : -1), selectedRule);
+                }
+
+            }
+        }
+
+        public int GetPreferedHeight()
+        {
+            int minHeight = 0;
+
+            for (int i = 0; i < Math.Min(10, this.Controls.Count); i++)
+                minHeight += this.Controls[i].Height;
+
+            return minHeight;
+        }
+
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionList.designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionList.designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionList.designer.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,51 @@
+namespace Maestro.Editors.LayerDefinition.Vector.Scales
+{
+    partial class ConditionList
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConditionList));
+            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+            this.SuspendLayout();
+            // 
+            // ConditionList
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+            this.Name = "ConditionList";
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolTip toolTip1;
+
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionList.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionList.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionList.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="$this.AutoScroll" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>591, 100</value>
+  </data>
+  <data name="&gt;&gt;toolTip1.Name" xml:space="preserve">
+    <value>toolTip1</value>
+  </data>
+  <data name="&gt;&gt;toolTip1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolTip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>ConditionList</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionListButtons.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionListButtons.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionListButtons.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,246 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using OSGeo.MapGuide.MaestroAPI.Exceptions;
+using OSGeo.MapGuide.MaestroAPI.ObjectModels;
+using Maestro.Editors.LayerDefinition.Vector.Thematics;
+
+namespace Maestro.Editors.LayerDefinition.Vector.Scales
+{
+    public partial class ConditionListButtons : UserControl
+    {
+        private PointTypeStyleType m_point;
+        private LineTypeStyleType m_line;
+        private AreaTypeStyleType m_area;
+
+        private VectorScaleRangeType m_parent;
+        private object m_lastSelection;
+        private object m_currentSelection;
+
+        public event EventHandler ItemChanged;
+
+        private VectorLayerEditorCtrl m_owner;
+
+        public VectorLayerEditorCtrl Owner
+        {
+            get { return m_owner; }
+            set
+            {
+                m_owner = value;
+                conditionList.Owner = m_owner;
+            }
+        }
+
+        public ConditionListButtons()
+        {
+            InitializeComponent();
+            conditionList.SelectionChanged += new EventHandler(conditionList_SelectionChanged);
+        }
+
+        private void conditionList_SelectionChanged(object sender, EventArgs e)
+        {
+            m_lastSelection = m_currentSelection;
+            m_currentSelection = conditionList.SelectedItem;
+            CopyRuleButton.Enabled = MoveRuleUpButton.Enabled = MoveRuleDownButton.Enabled = m_currentSelection != null || m_lastSelection != null;        
+        }
+
+        public void SetItem(VectorScaleRangeType parent, PointTypeStyleType point)
+        {
+            SetItemInternal(parent, point);
+            conditionList.SetItem(parent, point);
+        }
+
+        public void SetItem(VectorScaleRangeType parent, LineTypeStyleType line)
+        {
+            SetItemInternal(parent, line);
+            conditionList.SetItem(parent, line);
+        }
+
+        public void SetItem(VectorScaleRangeType parent, AreaTypeStyleType area)
+        {
+            SetItemInternal(parent, area);
+            conditionList.SetItem(parent, area);
+        }
+
+
+        private void SetItemInternal(VectorScaleRangeType parent, object item)
+        {
+            m_parent = parent;
+            m_point = item as PointTypeStyleType;
+            m_line = item as LineTypeStyleType;
+            m_area = item as AreaTypeStyleType;
+
+        }
+
+        public void AddRule()
+        {
+            AddRuleButton_Click(null, null);
+        }
+
+        private void AddRuleButton_Click(object sender, EventArgs e)
+        {
+            if (m_point != null)
+            {
+                PointRuleType prt = ObjectFactory.CreatePointRule();
+                m_point.PointRule.Add(prt);
+                conditionList.AddRuleControl(prt).Focus();
+            }
+            else if (m_line != null)
+            {
+                LineRuleType lrt = ObjectFactory.CreateLineRule();
+                m_line.LineRule.Add(lrt);
+                conditionList.AddRuleControl(lrt).Focus(); ;
+            }
+            else if (m_area != null)
+            {
+                AreaRuleType art = ObjectFactory.CreateAreaRule();
+                m_area.AreaRule.Add(art);
+                conditionList.AddRuleControl(art).Focus();
+
+            }
+
+            if (ItemChanged != null)
+                ItemChanged(this, null);
+        }
+
+        private void CreateThemeButton_Click(object sender, EventArgs e)
+        {
+            try
+            {
+                object owner = null;
+
+                if (m_point != null)
+                    owner = m_point;
+                else if (m_line != null)
+                    owner = m_line;
+                else if (m_area != null)
+                    owner = m_area;
+
+                ILayerDefinition layer = (ILayerDefinition)m_owner.Editor.GetEditedResource();
+                IVectorLayerDefinition vl = (IVectorLayerDefinition)layer.SubLayer;
+                var cls = m_owner.Editor.FeatureService.GetFeatureSourceSchema(vl.FeatureSourceID, vl.FullQualifiedClassName);
+                ThemeCreator dlg = new ThemeCreator(
+                    m_owner.Editor, 
+                    layer,
+                    m_owner.Schema, 
+                    owner);
+                if (dlg.ShowDialog(this) == DialogResult.OK)
+                {
+                    m_owner.HasChanged();
+                    m_owner.UpdateDisplay();
+                }
+            }
+            catch (Exception ex)
+            {
+                string msg = NestedExceptionMessageProcessor.GetFullMessage(ex);
+                m_owner.SetLastException(ex);
+                MessageBox.Show(this, string.Format(Properties.Resources.GenericError, msg), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+            
+        }
+
+        private void CopyRuleButton_Click(object sender, EventArgs e)
+        {
+            if (m_currentSelection == null)
+                conditionList.SelectedItem = m_lastSelection;
+
+            if (conditionList.SelectedItem == null)
+                return;
+
+            object rule = Utility.XmlDeepCopy(conditionList.SelectedItem);
+
+
+            if (m_point != null)
+            {
+                if (m_point.PointRule == null)
+                    m_point.PointRule = new BindingList<PointRuleType>();
+                m_point.PointRule.Add((PointRuleType)rule);
+            }
+            else if (m_line != null)
+            {
+                if (m_line.LineRule == null)
+                    m_line.LineRule = new BindingList<LineRuleType>();
+                m_line.LineRule.Add((LineRuleType)rule);
+            }
+            else if (m_area != null)
+            {
+                if (m_area.AreaRule == null)
+                    m_area.AreaRule = new BindingList<AreaRuleType>();
+                m_area.AreaRule.Add((AreaRuleType)rule);
+            }
+            else
+                return;
+
+            conditionList.AddRuleControl(rule).Focus();
+
+            if (ItemChanged != null)
+                ItemChanged(this, null);
+        }
+
+        private void MoveRuleUpButton_Click(object sender, EventArgs e)
+        {
+            if (m_currentSelection == null)
+                conditionList.SelectedItem = m_lastSelection;
+            conditionList.MoveSelectedRule(false);
+            if (ItemChanged != null)
+                ItemChanged(this, null);
+        }
+
+        private void MoveRuleDownButton_Click(object sender, EventArgs e)
+        {
+            if (m_currentSelection == null)
+                conditionList.SelectedItem = m_lastSelection;
+            conditionList.MoveSelectedRule(true);
+            if (ItemChanged != null)
+                ItemChanged(this, null);
+        }
+
+        private void conditionList_ItemChanged(object sender, EventArgs e)
+        {
+            if (ItemChanged != null)
+                ItemChanged(sender, null);
+        }
+
+
+        public void ResizeAuto()
+        {
+            this.Height = this.GetPreferedHeight();
+        }
+
+        public int GetPreferedHeight()
+        {
+            return panel1.Height + conditionList.GetPreferedHeight() + 24;
+        }
+
+        private void ShowInLegend_CheckedChanged(object sender, EventArgs e)
+        {
+            
+        }
+
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionListButtons.designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionListButtons.designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionListButtons.designer.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,164 @@
+namespace Maestro.Editors.LayerDefinition.Vector.Scales
+{
+    partial class ConditionListButtons
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConditionListButtons));
+            this.conditionList = new ConditionList();
+            this.label1 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.AddRuleButton = new System.Windows.Forms.Button();
+            this.CopyRuleButton = new System.Windows.Forms.Button();
+            this.CreateThemeButton = new System.Windows.Forms.Button();
+            this.MoveRuleDownButton = new System.Windows.Forms.Button();
+            this.MoveRuleUpButton = new System.Windows.Forms.Button();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.ShowInLegend = new System.Windows.Forms.CheckBox();
+            this.toolTips = new System.Windows.Forms.ToolTip(this.components);
+            this.panel1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // conditionList
+            // 
+            resources.ApplyResources(this.conditionList, "conditionList");
+            this.conditionList.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+            this.conditionList.Name = "conditionList";
+            this.conditionList.Owner = null;
+            this.conditionList.SelectedItem = null;
+            this.conditionList.ItemChanged += new System.EventHandler(this.conditionList_ItemChanged);
+            // 
+            // label1
+            // 
+            resources.ApplyResources(this.label1, "label1");
+            this.label1.Name = "label1";
+            // 
+            // label3
+            // 
+            resources.ApplyResources(this.label3, "label3");
+            this.label3.Name = "label3";
+            // 
+            // label4
+            // 
+            resources.ApplyResources(this.label4, "label4");
+            this.label4.Name = "label4";
+            // 
+            // AddRuleButton
+            // 
+            resources.ApplyResources(this.AddRuleButton, "AddRuleButton");
+            this.AddRuleButton.Name = "AddRuleButton";
+            this.toolTips.SetToolTip(this.AddRuleButton, resources.GetString("AddRuleButton.ToolTip"));
+            this.AddRuleButton.UseVisualStyleBackColor = true;
+            this.AddRuleButton.Click += new System.EventHandler(this.AddRuleButton_Click);
+            // 
+            // CopyRuleButton
+            // 
+            resources.ApplyResources(this.CopyRuleButton, "CopyRuleButton");
+            this.CopyRuleButton.Name = "CopyRuleButton";
+            this.toolTips.SetToolTip(this.CopyRuleButton, resources.GetString("CopyRuleButton.ToolTip"));
+            this.CopyRuleButton.UseVisualStyleBackColor = true;
+            this.CopyRuleButton.Click += new System.EventHandler(this.CopyRuleButton_Click);
+            // 
+            // CreateThemeButton
+            // 
+            resources.ApplyResources(this.CreateThemeButton, "CreateThemeButton");
+            this.CreateThemeButton.Name = "CreateThemeButton";
+            this.toolTips.SetToolTip(this.CreateThemeButton, resources.GetString("CreateThemeButton.ToolTip"));
+            this.CreateThemeButton.UseVisualStyleBackColor = true;
+            this.CreateThemeButton.Click += new System.EventHandler(this.CreateThemeButton_Click);
+            // 
+            // MoveRuleDownButton
+            // 
+            resources.ApplyResources(this.MoveRuleDownButton, "MoveRuleDownButton");
+            this.MoveRuleDownButton.Name = "MoveRuleDownButton";
+            this.toolTips.SetToolTip(this.MoveRuleDownButton, resources.GetString("MoveRuleDownButton.ToolTip"));
+            this.MoveRuleDownButton.UseVisualStyleBackColor = true;
+            this.MoveRuleDownButton.Click += new System.EventHandler(this.MoveRuleDownButton_Click);
+            // 
+            // MoveRuleUpButton
+            // 
+            resources.ApplyResources(this.MoveRuleUpButton, "MoveRuleUpButton");
+            this.MoveRuleUpButton.Name = "MoveRuleUpButton";
+            this.toolTips.SetToolTip(this.MoveRuleUpButton, resources.GetString("MoveRuleUpButton.ToolTip"));
+            this.MoveRuleUpButton.UseVisualStyleBackColor = true;
+            this.MoveRuleUpButton.Click += new System.EventHandler(this.MoveRuleUpButton_Click);
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this.ShowInLegend);
+            this.panel1.Controls.Add(this.MoveRuleUpButton);
+            this.panel1.Controls.Add(this.MoveRuleDownButton);
+            this.panel1.Controls.Add(this.CreateThemeButton);
+            this.panel1.Controls.Add(this.CopyRuleButton);
+            this.panel1.Controls.Add(this.AddRuleButton);
+            this.panel1.Controls.Add(this.label4);
+            this.panel1.Controls.Add(this.label3);
+            this.panel1.Controls.Add(this.label1);
+            resources.ApplyResources(this.panel1, "panel1");
+            this.panel1.Name = "panel1";
+            // 
+            // ShowInLegend
+            // 
+            resources.ApplyResources(this.ShowInLegend, "ShowInLegend");
+            this.ShowInLegend.Checked = true;
+            this.ShowInLegend.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.ShowInLegend.Name = "ShowInLegend";
+            this.toolTips.SetToolTip(this.ShowInLegend, resources.GetString("ShowInLegend.ToolTip"));
+            this.ShowInLegend.UseVisualStyleBackColor = true;
+            this.ShowInLegend.CheckedChanged += new System.EventHandler(this.ShowInLegend_CheckedChanged);
+            // 
+            // ConditionListButtons
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.conditionList);
+            this.Controls.Add(this.panel1);
+            this.Name = "ConditionListButtons";
+            this.panel1.ResumeLayout(false);
+            this.panel1.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private ConditionList conditionList;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Button AddRuleButton;
+        private System.Windows.Forms.Button CopyRuleButton;
+        private System.Windows.Forms.Button CreateThemeButton;
+        private System.Windows.Forms.Button MoveRuleDownButton;
+        private System.Windows.Forms.Button MoveRuleUpButton;
+        private System.Windows.Forms.Panel panel1;
+        private System.Windows.Forms.CheckBox ShowInLegend;
+        private System.Windows.Forms.ToolTip toolTips;
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionListButtons.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionListButtons.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ConditionListButtons.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,524 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="conditionList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="conditionList.AutoScroll" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="conditionList.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 24</value>
+  </data>
+  <data name="conditionList.Size" type="System.Drawing.Size, System.Drawing">
+    <value>592, 72</value>
+  </data>
+  <data name="conditionList.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;conditionList.Name" xml:space="preserve">
+    <value>conditionList</value>
+  </data>
+  <data name="&gt;&gt;conditionList.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.LayerEditorControls.ScaleControls.ConditionList, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4437, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;conditionList.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;conditionList.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="label1.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>32, 8</value>
+  </data>
+  <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>29, 13</value>
+  </data>
+  <data name="label1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="label1.Text" xml:space="preserve">
+    <value>Rule</value>
+  </data>
+  <data name="&gt;&gt;label1.Name" xml:space="preserve">
+    <value>label1</value>
+  </data>
+  <data name="&gt;&gt;label1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label1.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
+    <value>8</value>
+  </data>
+  <data name="label3.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>304, 8</value>
+  </data>
+  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>64, 13</value>
+  </data>
+  <data name="label3.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="label3.Text" xml:space="preserve">
+    <value>Featurestyle</value>
+  </data>
+  <data name="&gt;&gt;label3.Name" xml:space="preserve">
+    <value>label3</value>
+  </data>
+  <data name="&gt;&gt;label3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label3.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="label4.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label4.Location" type="System.Drawing.Point, System.Drawing">
+    <value>440, 8</value>
+  </data>
+  <data name="label4.Size" type="System.Drawing.Size, System.Drawing">
+    <value>54, 13</value>
+  </data>
+  <data name="label4.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="label4.Text" xml:space="preserve">
+    <value>Labelstyle</value>
+  </data>
+  <data name="&gt;&gt;label4.Name" xml:space="preserve">
+    <value>label4</value>
+  </data>
+  <data name="&gt;&gt;label4.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label4.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <metadata name="toolTips.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="AddRuleButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+Nk+9L
+        U2EUx/1Lls55vSsnmisoSVFDgl6EZDFsFJNZC+yaXiqXiK0NxVgtXJKSjAoMoTJ8UdGMIJa7iXO3NukH
+        gex14N/wre+B3Rpr1QMHzj33nM9zfj1VVRWON+5BR6RVhHolvzL7nmAtjtzrgJ68gMl0SIT64flD2H3V
+        URmkP7yIhikHhpIBxMwbmN2KYe7zDO6aM4hv3UQ0O4nAC5/40Lfs5vqwDb7nfZjYGMVU/hqms2G8L6RF
+        CInkxnF9Q0PfynEoEVspgGkffNCMwdQARrPDmMgFETLGUDyJ3DzGP16GvjmI82/6sT/hAmOsLJzRGnQ9
+        OQD/mhda5qxAgindAsyZcbHxny/lQetyMxgjAHa4caEObc/cOLPai6G3AVxZ+ymvhi3AHeO22Hk7fQhg
+        jEyHY+KH+6kT93MLVlAlhT1peaxKDGMtAI1s1r+OUXhXCiiWQEDvajeC6QDCGQ3TxojFWszPygRYGkso
+        ZmAtGBuyb0lB52sVPesunDab4DfcFiD2pR+nNptwzHChPelEyyPlVxPZSI5kb8KB7mQdPKaCc19VaB9c
+        JQD/JxUnMvXoeqlI/SVjJISL1L5kh3fdDm3bDn27GoWdvMitbz1iO2nUig99yzaR66n+BrlU2IXQd5sI
+        YQS3LdaIzx9XuUhkao1RmzgfXakWoU5bWdp/e6L/+5x/AIne8ctKOU3sAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="AddRuleButton.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="AddRuleButton.Size" type="System.Drawing.Size, System.Drawing">
+    <value>32, 24</value>
+  </data>
+  <data name="AddRuleButton.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="AddRuleButton.ToolTip" xml:space="preserve">
+    <value>Add a new rule</value>
+  </data>
+  <data name="&gt;&gt;AddRuleButton.Name" xml:space="preserve">
+    <value>AddRuleButton</value>
+  </data>
+  <data name="&gt;&gt;AddRuleButton.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;AddRuleButton.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;AddRuleButton.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="CopyRuleButton.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="CopyRuleButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAWBJREFUOE+Nk+lO
+        wlAQRnn/pyDxBTBGE0kUqikgVpZA4WpdAgZSSVjcQPDHmDNmkAaLNvlyp+2dM/PNbTNBUBNTqVQRxL3v
+        lyWfL0rmr4vN8Wi61iCerePTgie53MFuCID+YCIk2mpxbv9QgGSze+kQACSYgHTcnVQuQ00GsrMLA5BA
+        3Oo+qv/3+WpLy+WntMObJNAA3Wgg971YWAtFX5PHs48tBbVQrt0GxGYAmZe0/wNYKADY03iuKwU4Hezp
+        ARkACwjQ0bGnm5kHXbEi65L45XXxDShXqjpAa58Z8Myq8pzqgHvDNwUR8z4BoHrpoqXJ1gEV602nlbFm
+        M6m3+0kAVdztSNrRVBqdoZx4wa8dmKWrulOYdsAwoNOWyYZo1sw/9qhOEWylfuX2HdA61czemd+UwnlT
+        /Gq0GwDZhsjg3MOz2jM13OR/gPFsoRtNwEzrY0zzsfmbE3M6thIjcr8A7AeyRar4iUMAAAAASUVORK5C
+        YII=
+</value>
+  </data>
+  <data name="CopyRuleButton.Location" type="System.Drawing.Point, System.Drawing">
+    <value>136, 0</value>
+  </data>
+  <data name="CopyRuleButton.Size" type="System.Drawing.Size, System.Drawing">
+    <value>32, 24</value>
+  </data>
+  <data name="CopyRuleButton.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name="CopyRuleButton.ToolTip" xml:space="preserve">
+    <value>Click to insert a copy of the current rule</value>
+  </data>
+  <data name="&gt;&gt;CopyRuleButton.Name" xml:space="preserve">
+    <value>CopyRuleButton</value>
+  </data>
+  <data name="&gt;&gt;CopyRuleButton.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;CopyRuleButton.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;CopyRuleButton.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="CreateThemeButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAjNJREFUOE+Nk+tL
+        k1EYwP3iSLp8KPxQVPQHBBYhRUEIFRRSEEpZC2oR2g210A9FXpcyDRmFY+atGVMsGirD6SxXOdPIoQOh
+        JBVMtERnzSut5vnlecFkm2kv/HjO87zv+zvn4ZwTFhb0OB8b6TJV0llWyvvqaoLf/zN35Gnx2BuZ73jL
+        z842BTl2LwrXlLTkZDFttSCa6xWmGsz01GTitunosT/AZkxeXTJqKMJXVaLQX5lJb3se/pnWAMaHntHW
+        UhAqkkv/UZjFgl7LkP42gz35+L21CmKuQWF0pIKPfXolhkjepKXgTb+KuJdMp/k8vnE9YroEMWOipesO
+        po5sbP0m2r/VYek1YrQFtdOkUTN2dB9f1TEMfNAgPHcRXh1VrxNxjFXjmrPS7VtG5pY+w3IrzuJHDETt
+        wH1sO5OfziImrtDUkUDdiB7HfDltC4vLDkLWy7uzliX2vbt4d3gbw+2RiNH96FrjeOHNpcGvxYaOZgoV
+        5FhS/yuX555cnjofBkqc5nV8cW0ixxVPxWwSZnGDWm4FIGuSsu9J6BzXAnelRhuD0xpBqjuaotmTGEQc
+        pZwLQdYLJmNJfxkbuq2WJwc5YVOhmdhAmthJNlHcJ5p8Digxg92k/N7KheHFiazHVz5gNy1HSBgM5/K8
+        iutiI8lsIZVIJcr80pSK+N7w1U/nqVfrUY+oFEmiP+IvMj/zOZyLdXvWviOnmzYrH0vREnLm//p56QYW
+        t2aQZD2EpjFqxZ7/AEja63tRpW6zAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="CreateThemeButton.Location" type="System.Drawing.Point, System.Drawing">
+    <value>104, 0</value>
+  </data>
+  <data name="CreateThemeButton.Size" type="System.Drawing.Size, System.Drawing">
+    <value>32, 24</value>
+  </data>
+  <data name="CreateThemeButton.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="CreateThemeButton.ToolTip" xml:space="preserve">
+    <value>Click to create a theme for the feature</value>
+  </data>
+  <data name="&gt;&gt;CreateThemeButton.Name" xml:space="preserve">
+    <value>CreateThemeButton</value>
+  </data>
+  <data name="&gt;&gt;CreateThemeButton.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;CreateThemeButton.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;CreateThemeButton.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="MoveRuleDownButton.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="MoveRuleDownButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAZBJREFUOE+Nkk1L
+        AlEUhv19fSyDhDYlBUERUQ4IiUjQRpD6By3auDEGKiREyBhJMFPJ8SvNEZUCTQlLrcWp99QdZxoTB14O
+        zNzzcM4z12b7fhJJlaJRhRTlxhTxDhUJhyOE85YHjYPhJ/XePiYGgGBQtkIAQHO7O9TT6vTpbwAoFUtW
+        iBFQa7xQ4aHOAQBVzWucs4tzbhbRV/kPABj8oFZqbYbBRVVrmn1MAmSyjzwJ1kNNpnK8rkkoqJCIQ8YV
+        nlrv3HBcOiFf3stxKx4+ZwEIiUaAWOHg3kVH3R1yNRy0cTczPQATYO/9tET+rpOk+gqtxud5lakmEPa9
+        SacJAPBEgGhEhURPYlcHrClzPEEodDm6UJAIB63OgCVyo6qRfBum5dgCuVS7DoADvHMHPCNAJHL1C+jz
+        /0ZzIlXmwLqvsU6+jvTjIDtLm9dLfKn0iyQm0Jo9Qir1V06u0qVU8Zm2Yg79L2CFeDlndmCcAPtBkgiA
+        iWqBpLSd9oqLFMjI4x0AgsDuuPjlQ3KebuvfhMQv5TTlyUFPaVgAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="MoveRuleDownButton.Location" type="System.Drawing.Point, System.Drawing">
+    <value>544, 0</value>
+  </data>
+  <data name="MoveRuleDownButton.Size" type="System.Drawing.Size, System.Drawing">
+    <value>32, 24</value>
+  </data>
+  <data name="MoveRuleDownButton.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="MoveRuleDownButton.ToolTip" xml:space="preserve">
+    <value>Move the selected rule down</value>
+  </data>
+  <data name="&gt;&gt;MoveRuleDownButton.Name" xml:space="preserve">
+    <value>MoveRuleDownButton</value>
+  </data>
+  <data name="&gt;&gt;MoveRuleDownButton.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;MoveRuleDownButton.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;MoveRuleDownButton.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="MoveRuleUpButton.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="MoveRuleUpButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAahJREFUOE+Nk01L
+        AlEYhf1l7VpEizaBFEEREmFQEGgFQYukTRD9g1atIlEESwmpxEZL0lSUydRG1Ci0ibDsY3Hq3JjRaaaP
+        gcO9c2fe577n3Bmb7fNKnudxfBxDLBY3SFvjSO3vh8H3TRcLX17f0X56+1UHBxH4fAEzhAAWtx5eTWqq
+        HbHGMRI5QvGyCK/Xb4T0Aqr1e8hXNeRlBUqjrc95z901GSBWAEK4K/MhtKLcCRizuFYaoB09i58ALExl
+        ZN1WU31BIlMQdg0AUhkivWoWuBstaIDUjQx/OfQzQAuxF8A5LVxW63DnpuAq2OGPh4U1UwdWgNvms/C9
+        HF/EZmsWKw0HnNIouP4vAJPfutiGR5nAuuqCuzYJZ3YQnuTS3wAWh1JRjJz0Y7Uyjo2HLmAs2gfPzlr3
+        FBgiLTBl+mZxrqCIwAKnh3BJTh3giA5CKuWxu+frAviFfQE6KFdbSGcrQsl0CYnzKyyfzBsAPB3LDPiA
+        KtcehXJFVWglsWACGH6s3g7YBVPWRCBD0zKgBctjJIRia981H5zB3NkwpqUh2AMDCIZCuoUPJ7XmPSyz
+        fF8AAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="MoveRuleUpButton.Location" type="System.Drawing.Point, System.Drawing">
+    <value>512, 0</value>
+  </data>
+  <data name="MoveRuleUpButton.Size" type="System.Drawing.Size, System.Drawing">
+    <value>32, 24</value>
+  </data>
+  <data name="MoveRuleUpButton.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="MoveRuleUpButton.ToolTip" xml:space="preserve">
+    <value>Move the selected rule up</value>
+  </data>
+  <data name="&gt;&gt;MoveRuleUpButton.Name" xml:space="preserve">
+    <value>MoveRuleUpButton</value>
+  </data>
+  <data name="&gt;&gt;MoveRuleUpButton.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;MoveRuleUpButton.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;MoveRuleUpButton.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;ShowInLegend.Name" xml:space="preserve">
+    <value>ShowInLegend</value>
+  </data>
+  <data name="&gt;&gt;ShowInLegend.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ShowInLegend.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;ShowInLegend.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>593, 24</value>
+  </data>
+  <data name="panel1.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;panel1.Name" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;panel1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;panel1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="ShowInLegend.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="ShowInLegend.Location" type="System.Drawing.Point, System.Drawing">
+    <value>176, 6</value>
+  </data>
+  <data name="ShowInLegend.Size" type="System.Drawing.Size, System.Drawing">
+    <value>103, 17</value>
+  </data>
+  <data name="ShowInLegend.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="ShowInLegend.Text" xml:space="preserve">
+    <value>Show in Legend</value>
+  </data>
+  <data name="ShowInLegend.ToolTip" xml:space="preserve">
+    <value>Check to show in legend (only avalible in LayerDefinition 1.3.0 and above)</value>
+  </data>
+  <data name="&gt;&gt;ShowInLegend.Name" xml:space="preserve">
+    <value>ShowInLegend</value>
+  </data>
+  <data name="&gt;&gt;ShowInLegend.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ShowInLegend.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;ShowInLegend.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="toolTips.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>593, 97</value>
+  </data>
+  <data name="&gt;&gt;toolTips.Name" xml:space="preserve">
+    <value>toolTips</value>
+  </data>
+  <data name="&gt;&gt;toolTips.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolTip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>ConditionListButtons</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/EditorTemplateForm.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/EditorTemplateForm.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/EditorTemplateForm.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,58 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Maestro.Editors.LayerDefinition.Vector.Scales
+{
+    public partial class EditorTemplateForm : Form
+    {
+        public EditorTemplateForm()
+        {
+            InitializeComponent();
+        }
+
+        public void RefreshSize()
+        {
+            if (ItemPanel.Controls.Count > 0 && ItemPanel.Controls[0] as UserControl != null)
+            {
+                this.Height = ButtonPanel.Height + ItemPanel.Top + (ItemPanel.Controls[0] as UserControl).AutoScrollMinSize.Height + (8 * 6);
+
+                this.Width = Math.Max(this.Width, (ItemPanel.Controls[0] as UserControl).AutoScrollMinSize.Width + 2 * ItemPanel.Left + (8 * 4));
+            }
+        }
+
+        private void EditorTemplateForm_Load(object sender, EventArgs e)
+        {
+            RefreshSize();
+        }
+
+        private void OKBtn_Click(object sender, EventArgs e)
+        {
+            this.DialogResult = DialogResult.OK;
+            this.Close();
+        }
+    }
+}
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/EditorTemplateForm.designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/EditorTemplateForm.designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/EditorTemplateForm.designer.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,87 @@
+namespace Maestro.Editors.LayerDefinition.Vector.Scales
+{
+    partial class EditorTemplateForm
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditorTemplateForm));
+            this.ButtonPanel = new System.Windows.Forms.Panel();
+            this.CancelBtn = new System.Windows.Forms.Button();
+            this.OKBtn = new System.Windows.Forms.Button();
+            this.ItemPanel = new System.Windows.Forms.Panel();
+            this.ButtonPanel.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // ButtonPanel
+            // 
+            this.ButtonPanel.Controls.Add(this.CancelBtn);
+            this.ButtonPanel.Controls.Add(this.OKBtn);
+            resources.ApplyResources(this.ButtonPanel, "ButtonPanel");
+            this.ButtonPanel.Name = "ButtonPanel";
+            // 
+            // CancelBtn
+            // 
+            resources.ApplyResources(this.CancelBtn, "CancelBtn");
+            this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.CancelBtn.Name = "CancelBtn";
+            this.CancelBtn.UseVisualStyleBackColor = true;
+            // 
+            // OKBtn
+            // 
+            resources.ApplyResources(this.OKBtn, "OKBtn");
+            this.OKBtn.Name = "OKBtn";
+            this.OKBtn.UseVisualStyleBackColor = true;
+            this.OKBtn.Click += new System.EventHandler(this.OKBtn_Click);
+            // 
+            // ItemPanel
+            // 
+            resources.ApplyResources(this.ItemPanel, "ItemPanel");
+            this.ItemPanel.Name = "ItemPanel";
+            // 
+            // EditorTemplateForm
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.CancelButton = this.CancelBtn;
+            this.Controls.Add(this.ItemPanel);
+            this.Controls.Add(this.ButtonPanel);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
+            this.Name = "EditorTemplateForm";
+            this.Load += new System.EventHandler(this.EditorTemplateForm_Load);
+            this.ButtonPanel.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Panel ButtonPanel;
+        public System.Windows.Forms.Panel ItemPanel;
+        private System.Windows.Forms.Button CancelBtn;
+        private System.Windows.Forms.Button OKBtn;
+    }
+}
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/EditorTemplateForm.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/EditorTemplateForm.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/EditorTemplateForm.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CancelBtn.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="CancelBtn.Location" type="System.Drawing.Point, System.Drawing">
+    <value>160, 8</value>
+  </data>
+  <data name="CancelBtn.Size" type="System.Drawing.Size, System.Drawing">
+    <value>64, 24</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CancelBtn.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="CancelBtn.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="&gt;&gt;CancelBtn.Name" xml:space="preserve">
+    <value>CancelBtn</value>
+  </data>
+  <data name="&gt;&gt;CancelBtn.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;CancelBtn.Parent" xml:space="preserve">
+    <value>ButtonPanel</value>
+  </data>
+  <data name="&gt;&gt;CancelBtn.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="OKBtn.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="OKBtn.Location" type="System.Drawing.Point, System.Drawing">
+    <value>72, 8</value>
+  </data>
+  <data name="OKBtn.Size" type="System.Drawing.Size, System.Drawing">
+    <value>64, 24</value>
+  </data>
+  <data name="OKBtn.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="OKBtn.Text" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="&gt;&gt;OKBtn.Name" xml:space="preserve">
+    <value>OKBtn</value>
+  </data>
+  <data name="&gt;&gt;OKBtn.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;OKBtn.Parent" xml:space="preserve">
+    <value>ButtonPanel</value>
+  </data>
+  <data name="&gt;&gt;OKBtn.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="ButtonPanel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Bottom</value>
+  </data>
+  <data name="ButtonPanel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 232</value>
+  </data>
+  <data name="ButtonPanel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>297, 41</value>
+  </data>
+  <data name="ButtonPanel.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;ButtonPanel.Name" xml:space="preserve">
+    <value>ButtonPanel</value>
+  </data>
+  <data name="&gt;&gt;ButtonPanel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ButtonPanel.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;ButtonPanel.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="ItemPanel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left, Right</value>
+  </data>
+  <data name="ItemPanel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 8</value>
+  </data>
+  <data name="ItemPanel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>280, 224</value>
+  </data>
+  <data name="ItemPanel.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;ItemPanel.Name" xml:space="preserve">
+    <value>ItemPanel</value>
+  </data>
+  <data name="&gt;&gt;ItemPanel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ItemPanel.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;ItemPanel.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
+    <value>297, 273</value>
+  </data>
+  <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
+    <value>CenterParent</value>
+  </data>
+  <data name="$this.Text" xml:space="preserve">
+    <value>Edit the style</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>EditorTemplateForm</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ItemStyle.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ItemStyle.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ItemStyle.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,211 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using Maestro.Editors.LayerDefinition.Vector.StyleEditors;
+
+namespace Maestro.Editors.LayerDefinition.Vector.Scales
+{
+    public partial class ItemStyle : UserControl
+    {
+        private TextSymbolType m_label;
+        private PointSymbolization2DType m_point;
+        private IList<StrokeType> m_line;
+        private AreaSymbolizationFillType m_area;
+
+        private object m_parent;
+
+        private bool isLabel = false;
+        private bool isPoint = false;
+        private bool isLine = false;
+        private bool isArea = false;
+
+        public event EventHandler ItemChanged;
+
+        private VectorLayerEditorCtrl m_owner;
+
+        public VectorLayerEditorCtrl Owner
+        {
+            get { return m_owner; }
+            set { m_owner = value; }
+        }
+
+        public ItemStyle()
+        {
+            InitializeComponent();
+        }
+
+        public void SetItem(object parent, TextSymbolType label)
+        {
+            isLabel = true;
+            SetItemInternal(parent, label);
+        }
+
+        public void SetItem(PointRuleType parent, PointSymbolization2DType point)
+        {
+            isPoint = true;
+            SetItemInternal(parent, point);
+        }
+
+        public void SetItem(LineRuleType parent, IList<StrokeType> line)
+        {
+            isLine = true;
+            SetItemInternal(parent, line);
+        }
+
+        public void SetItem(AreaRuleType parent, AreaSymbolizationFillType area)
+        {
+            isArea = true;
+            SetItemInternal(parent, area);
+        }
+
+        private void SetItemInternal(object parent, object item)
+        {
+            m_parent = parent;
+            m_label = item as TextSymbolType;
+            m_point = item as PointSymbolization2DType;
+            m_line = item as IList<StrokeType>;
+            m_area = item as AreaSymbolizationFillType;
+
+        }
+
+        private void previewPicture_Paint(object sender, PaintEventArgs e)
+        {
+            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
+            Rectangle rect = new Rectangle(0, 0, previewPicture.Width, previewPicture.Height);
+            if (m_label != null)
+            {
+                FeaturePreviewRender.RenderPreviewFont(e.Graphics, rect, m_label);
+            }
+            else if (m_point != null)
+            {
+				if (((PointSymbolization2DType)m_point).Item.GetType() == typeof(MarkSymbolType))
+					FeaturePreviewRender.RenderPreviewPoint(e.Graphics, rect, m_point.Item as MarkSymbolType);
+				else if (((PointSymbolization2DType)m_point).Item.GetType() == typeof(FontSymbolType))
+					FeaturePreviewRender.RenderPreviewFontSymbol(e.Graphics, rect, m_point.Item as FontSymbolType);
+			}
+            else if (m_line != null)
+            {
+                FeaturePreviewRender.RenderPreviewLine(e.Graphics, rect, m_line);
+            }
+            else if (m_area != null)
+            {
+                FeaturePreviewRender.RenderPreviewArea(e.Graphics, rect, m_area);
+            }
+            else
+                FeaturePreviewRender.RenderPreviewFont(e.Graphics, rect, null);
+        }
+
+        private void EditButton_Click(object sender, EventArgs e)
+        {
+            UserControl uc = null;
+            if (isLabel)
+            {
+                uc = new FontStyleEditor(m_owner.Editor, m_owner.Schema, m_owner.FeatureSourceId);
+                ((FontStyleEditor)uc).Item = (TextSymbolType)Utility.DeepCopy(m_label);
+            }
+            else if (isPoint)
+            {
+                uc = new PointFeatureStyleEditor(m_owner.Editor, m_owner.Schema, m_owner.FeatureSourceId);
+                ((PointFeatureStyleEditor)uc).Item = (PointSymbolization2DType)Utility.XmlDeepCopy(m_point);
+            }
+            else if (isLine)
+            {
+                uc = new LineFeatureStyleEditor(m_owner.Editor, m_owner.Schema, m_owner.FeatureSourceId);
+                ((LineFeatureStyleEditor)uc).Item = (IList<StrokeType>)Utility.XmlDeepCopy(m_line);
+            }
+            else if (isArea)
+            {
+                uc = new AreaFeatureStyleEditor(m_owner.Editor, m_owner.Schema, m_owner.FeatureSourceId);
+                ((AreaFeatureStyleEditor)uc).Item = (AreaSymbolizationFillType)Utility.XmlDeepCopy(m_area);
+            }
+
+            if (uc != null)
+            {
+                EditorTemplateForm dlg = new EditorTemplateForm();
+                dlg.ItemPanel.Controls.Add(uc);
+                uc.Dock = DockStyle.Fill;
+                dlg.RefreshSize();
+                if (dlg.ShowDialog(this) == DialogResult.OK)
+                {
+                    if (isLabel)
+                    {
+                        m_label = ((FontStyleEditor)uc).Item;
+                        if (m_parent as PointRuleType != null)
+                            ((PointRuleType)m_parent).Label = m_label;
+                        else if (m_parent as LineRuleType != null)
+                            ((LineRuleType)m_parent).Label = m_label;
+                        else if (m_parent as AreaRuleType != null)
+                            ((AreaRuleType)m_parent).Label = m_label;
+
+                        if (ItemChanged != null)
+                            ItemChanged(m_label, null);
+                    }
+                    else if (isPoint)
+                    {
+                        m_point = ((PointFeatureStyleEditor)uc).Item;
+                        ((PointRuleType)m_parent).Item = m_point;
+                        if (ItemChanged != null)
+                            ItemChanged(m_point, null);
+                    }
+                    else if (isLine)
+                    {
+                        m_line = ((LineFeatureStyleEditor)uc).Item;
+                        ((LineRuleType)m_parent).Items = (BindingList<StrokeType>)m_line;
+                        if (ItemChanged != null)
+                            ItemChanged(m_line, null);
+                    }
+                    else if (isArea)
+                    {
+                        m_area = ((AreaFeatureStyleEditor)uc).Item;
+                        ((AreaRuleType)m_parent).Item = m_area; ;
+                        if (ItemChanged != null)
+                            ItemChanged(m_area, null);
+                    }
+                    
+                    this.Refresh();
+
+                }
+            }
+
+        }
+
+        private void previewPicture_Click(object sender, EventArgs e)
+        {
+            try { Parent.Focus(); }
+            catch {}
+        }
+
+        private void previewPicture_DoubleClick(object sender, EventArgs e)
+        {
+            try { Parent.Focus(); }
+            catch { }
+
+            EditButton_Click(sender, e);
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ItemStyle.designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ItemStyle.designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ItemStyle.designer.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,72 @@
+namespace Maestro.Editors.LayerDefinition.Vector.Scales
+{
+    partial class ItemStyle
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ItemStyle));
+            this.previewPicture = new System.Windows.Forms.PictureBox();
+            this.EditButton = new System.Windows.Forms.Button();
+            ((System.ComponentModel.ISupportInitialize)(this.previewPicture)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // previewPicture
+            // 
+            this.previewPicture.BackColor = System.Drawing.Color.White;
+            this.previewPicture.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+            resources.ApplyResources(this.previewPicture, "previewPicture");
+            this.previewPicture.Name = "previewPicture";
+            this.previewPicture.TabStop = false;
+            this.previewPicture.DoubleClick += new System.EventHandler(this.previewPicture_DoubleClick);
+            this.previewPicture.Click += new System.EventHandler(this.previewPicture_Click);
+            this.previewPicture.Paint += new System.Windows.Forms.PaintEventHandler(this.previewPicture_Paint);
+            // 
+            // EditButton
+            // 
+            resources.ApplyResources(this.EditButton, "EditButton");
+            this.EditButton.Name = "EditButton";
+            this.EditButton.UseVisualStyleBackColor = true;
+            this.EditButton.Click += new System.EventHandler(this.EditButton_Click);
+            // 
+            // ItemStyle
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.previewPicture);
+            this.Controls.Add(this.EditButton);
+            this.Name = "ItemStyle";
+            ((System.ComponentModel.ISupportInitialize)(this.previewPicture)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.PictureBox previewPicture;
+        private System.Windows.Forms.Button EditButton;
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ItemStyle.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ItemStyle.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ItemStyle.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="previewPicture.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="previewPicture.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="previewPicture.Size" type="System.Drawing.Size, System.Drawing">
+    <value>113, 20</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="previewPicture.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Name" xml:space="preserve">
+    <value>previewPicture</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Type" xml:space="preserve">
+    <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="EditButton.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Right</value>
+  </data>
+  <data name="EditButton.Location" type="System.Drawing.Point, System.Drawing">
+    <value>113, 0</value>
+  </data>
+  <data name="EditButton.Size" type="System.Drawing.Size, System.Drawing">
+    <value>24, 20</value>
+  </data>
+  <data name="EditButton.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="EditButton.Text" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="&gt;&gt;EditButton.Name" xml:space="preserve">
+    <value>EditButton</value>
+  </data>
+  <data name="&gt;&gt;EditButton.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;EditButton.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;EditButton.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>137, 20</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>ItemStyle</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRange.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRange.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRange.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,163 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using System.Threading;
+
+namespace Maestro.Editors.LayerDefinition.Vector.Scales
+{
+    public partial class ScaleRange : UserControl
+    {
+        private VectorScaleRangeType m_vsc;
+        private bool m_isUpdating = false;
+
+        public event EventHandler ItemChanged;
+        
+        private VectorLayerEditorCtrl m_owner;
+
+        public bool HasUnsupportedItems { get { return scaleRangeConditions.HasUnsupportedItems; } }
+
+        public VectorLayerEditorCtrl Owner
+        {
+            get { return m_owner; }
+            set
+            {
+                m_owner = value;
+                scaleRangeConditions.Owner = m_owner;
+            }
+        }
+
+
+        public ScaleRange()
+        {
+            InitializeComponent();
+        }
+
+        public VectorScaleRangeType Item { get { return m_vsc; } }
+
+        public void SetItem(VectorScaleRangeType vsc)
+        {
+            try
+            {
+                m_isUpdating = true;
+                m_vsc = vsc;
+                MaxScale.Text = m_vsc.MaxScaleSpecified ? m_vsc.MaxScale.ToString(Thread.CurrentThread.CurrentUICulture) : Properties.Resources.InfiniteValue;
+                MinScale.Text = m_vsc.MinScaleSpecified ? m_vsc.MinScale.ToString(Thread.CurrentThread.CurrentUICulture) : Properties.Resources.InfiniteValue;
+
+                scaleRangeConditions.SetItem(m_vsc);
+            }
+            finally
+            {
+                m_isUpdating = false;
+            }
+        }
+
+        private void MinScale_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (m_vsc == null || m_isUpdating)
+                return;
+
+            if (MinScale.SelectedIndex == 0)
+                m_vsc.MinScaleSpecified = false;
+
+            if (ItemChanged != null)
+                ItemChanged(m_vsc, null);
+        }
+
+        private void MaxScale_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (m_vsc == null || m_isUpdating)
+                return;
+
+            if (MaxScale.SelectedIndex == 0)
+                m_vsc.MaxScaleSpecified = false;
+
+            if (ItemChanged != null)
+                ItemChanged(m_vsc, null);
+        }
+
+        private void MinScale_TextChanged(object sender, EventArgs e)
+        {
+            if (m_vsc == null || m_isUpdating)
+                return;
+
+            double o;
+
+            if (double.TryParse(MinScale.Text, System.Globalization.NumberStyles.Number, System.Threading.Thread.CurrentThread.CurrentUICulture, out o))
+            {
+                m_vsc.MinScaleSpecified = true;
+                m_vsc.MinScale = o;
+                errorProvider.SetError(MinScale, null);
+            }
+            else
+                errorProvider.SetError(MinScale, Properties.Resources.InvalidValueError);
+
+            if (ItemChanged != null)
+                ItemChanged(m_vsc, null);
+        }
+
+        private void MaxScale_TextChanged(object sender, EventArgs e)
+        {
+            if (m_vsc == null || m_isUpdating)
+                return;
+
+            double o;
+
+            if (double.TryParse(MaxScale.Text, System.Globalization.NumberStyles.Number, System.Threading.Thread.CurrentThread.CurrentUICulture, out o))
+            {
+                m_vsc.MaxScaleSpecified = true;
+                m_vsc.MaxScale = o;
+                errorProvider.SetError(MaxScale, null);
+            }
+            else
+                errorProvider.SetError(MaxScale, Properties.Resources.InvalidValueError);
+
+            if (ItemChanged != null)
+                ItemChanged(m_vsc, null);
+        }
+
+        private void scaleRangeConditions_ItemChanged(object sender, EventArgs e)
+        {
+            if (m_vsc == null || m_isUpdating)
+                return;
+
+            if (ItemChanged != null)
+                ItemChanged(m_vsc, null);
+        }
+
+        public int GetPreferedHeight()
+        {
+            return panel2.Height + scaleRangeConditions.GetPreferedHeight();
+        }
+
+        public void ResizeAuto()
+        {
+            scaleRangeConditions.ResizeAuto();
+            this.Height = this.GetPreferedHeight();
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRange.designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRange.designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRange.designer.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,109 @@
+namespace Maestro.Editors.LayerDefinition.Vector.Scales
+{
+    partial class ScaleRange
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ScaleRange));
+            this.MinScale = new System.Windows.Forms.ComboBox();
+            this.MaxScale = new System.Windows.Forms.ComboBox();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.panel2 = new System.Windows.Forms.Panel();
+            this.scaleRangeConditions = new ScaleRangeConditions();
+            this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
+            this.panel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // MinScale
+            // 
+            this.MinScale.FormattingEnabled = true;
+            this.MinScale.Items.AddRange(new object[] {
+            resources.GetString("MinScale.Items")});
+            resources.ApplyResources(this.MinScale, "MinScale");
+            this.MinScale.Name = "MinScale";
+            this.MinScale.SelectedIndexChanged += new System.EventHandler(this.MinScale_SelectedIndexChanged);
+            this.MinScale.TextChanged += new System.EventHandler(this.MinScale_TextChanged);
+            // 
+            // MaxScale
+            // 
+            this.MaxScale.FormattingEnabled = true;
+            this.MaxScale.Items.AddRange(new object[] {
+            resources.GetString("MaxScale.Items")});
+            resources.ApplyResources(this.MaxScale, "MaxScale");
+            this.MaxScale.Name = "MaxScale";
+            this.MaxScale.SelectedIndexChanged += new System.EventHandler(this.MaxScale_SelectedIndexChanged);
+            this.MaxScale.TextChanged += new System.EventHandler(this.MaxScale_TextChanged);
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this.MinScale);
+            this.panel1.Controls.Add(this.MaxScale);
+            resources.ApplyResources(this.panel1, "panel1");
+            this.panel1.Name = "panel1";
+            // 
+            // panel2
+            // 
+            resources.ApplyResources(this.panel2, "panel2");
+            this.panel2.Name = "panel2";
+            // 
+            // scaleRangeConditions
+            // 
+            resources.ApplyResources(this.scaleRangeConditions, "scaleRangeConditions");
+            this.scaleRangeConditions.Name = "scaleRangeConditions";
+            this.scaleRangeConditions.Owner = null;
+            this.scaleRangeConditions.ItemChanged += new System.EventHandler(this.scaleRangeConditions_ItemChanged);
+            // 
+            // errorProvider
+            // 
+            this.errorProvider.ContainerControl = this;
+            // 
+            // ScaleRange
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.scaleRangeConditions);
+            this.Controls.Add(this.panel1);
+            this.Controls.Add(this.panel2);
+            this.Name = "ScaleRange";
+            this.panel1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private ScaleRangeConditions scaleRangeConditions;
+        private System.Windows.Forms.ComboBox MinScale;
+        private System.Windows.Forms.ComboBox MaxScale;
+        private System.Windows.Forms.Panel panel1;
+        private System.Windows.Forms.Panel panel2;
+        private System.Windows.Forms.ErrorProvider errorProvider;
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRange.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRange.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRange.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="MinScale.Items" xml:space="preserve">
+    <value>infinite</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="MinScale.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="MinScale.Size" type="System.Drawing.Size, System.Drawing">
+    <value>80, 21</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="MinScale.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;MinScale.Name" xml:space="preserve">
+    <value>MinScale</value>
+  </data>
+  <data name="&gt;&gt;MinScale.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;MinScale.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;MinScale.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="MaxScale.Items" xml:space="preserve">
+    <value>infinite</value>
+  </data>
+  <data name="MaxScale.Location" type="System.Drawing.Point, System.Drawing">
+    <value>80, 0</value>
+  </data>
+  <data name="MaxScale.Size" type="System.Drawing.Size, System.Drawing">
+    <value>80, 21</value>
+  </data>
+  <data name="MaxScale.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;MaxScale.Name" xml:space="preserve">
+    <value>MaxScale</value>
+  </data>
+  <data name="&gt;&gt;MaxScale.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;MaxScale.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;MaxScale.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Left</value>
+  </data>
+  <data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>160, 330</value>
+  </data>
+  <data name="panel1.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;panel1.Name" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;panel1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;panel1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Bottom</value>
+  </data>
+  <data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 330</value>
+  </data>
+  <data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>802, 8</value>
+  </data>
+  <data name="panel2.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="&gt;&gt;panel2.Name" xml:space="preserve">
+    <value>panel2</value>
+  </data>
+  <data name="&gt;&gt;panel2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;panel2.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;panel2.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="scaleRangeConditions.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="scaleRangeConditions.Location" type="System.Drawing.Point, System.Drawing">
+    <value>160, 0</value>
+  </data>
+  <data name="scaleRangeConditions.Size" type="System.Drawing.Size, System.Drawing">
+    <value>642, 330</value>
+  </data>
+  <data name="scaleRangeConditions.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;scaleRangeConditions.Name" xml:space="preserve">
+    <value>scaleRangeConditions</value>
+  </data>
+  <data name="&gt;&gt;scaleRangeConditions.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.LayerEditorControls.ScaleControls.ScaleRangeConditions, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4347, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;scaleRangeConditions.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;scaleRangeConditions.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>802, 338</value>
+  </data>
+  <data name="&gt;&gt;errorProvider.Name" xml:space="preserve">
+    <value>errorProvider</value>
+  </data>
+  <data name="&gt;&gt;errorProvider.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ErrorProvider, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>ScaleRange</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeConditions.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeConditions.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeConditions.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,257 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using OSGeo.MapGuide.MaestroAPI.ObjectModels;
+
+namespace Maestro.Editors.LayerDefinition.Vector.Scales
+{
+    public partial class ScaleRangeConditions: UserControl
+    {
+        public event EventHandler ItemChanged;
+
+        private VectorScaleRangeType m_vsc;
+        private bool m_isUpdating = false;
+        private bool m_hasUnsupportedItems = false;
+
+        public bool HasUnsupportedItems { get { return m_hasUnsupportedItems; } }
+
+        private VectorLayerEditorCtrl m_owner;
+
+        public VectorLayerEditorCtrl Owner
+        {
+            get { return m_owner; }
+            set
+            {
+                m_owner = value;
+                pointConditionList.Owner = m_owner;
+                lineConditionList.Owner = m_owner;
+                areaConditionList.Owner = m_owner;
+            }
+        }
+
+        public ScaleRangeConditions()
+        {
+            InitializeComponent();
+        }
+
+        public void SetItem(VectorScaleRangeType vsc)
+        {
+            try
+            {
+                m_isUpdating = true;
+                m_vsc = vsc;
+
+                bool hasPoints = false;
+                bool hasLines = false;
+                bool hasAreas = false;
+                m_hasUnsupportedItems = false;
+                if (m_vsc.Items != null)
+                    foreach (object o in m_vsc.Items)
+                    {
+                        if (o as PointTypeStyleType != null)
+                        {
+                            hasPoints = true;
+                            pointConditionList.SetItem(m_vsc, o as PointTypeStyleType);
+                        }
+                        else if (o as LineTypeStyleType != null)
+                        {
+                            hasLines = true;
+                            lineConditionList.SetItem(m_vsc, o as LineTypeStyleType);
+                        }
+                        else if (o as AreaTypeStyleType != null)
+                        {
+                            hasAreas = true;
+                            areaConditionList.SetItem(m_vsc, o as AreaTypeStyleType);
+                        }
+                        else
+                            m_hasUnsupportedItems = true;
+                    }
+
+                DisplayPoints.Checked = hasPoints;
+                DisplayLines.Checked = hasLines;
+                DisplayAreas.Checked = hasAreas;
+            }
+            finally
+            {
+                m_isUpdating = false;
+            }
+        }
+
+        private void DisplayPoints_CheckedChanged(object sender, EventArgs e)
+        {
+            pointConditionList.Visible = DisplayPoints.Checked;
+
+            if (DisplayPoints.Checked)
+            {
+                if (m_vsc.Items == null)
+                    m_vsc.Items = new BindingList<object>();
+
+                if (DisplayPoints.Tag != null)
+                {
+                    m_vsc.PointStyle = (PointTypeStyleType)DisplayPoints.Tag;
+                    DisplayPoints.Tag = null;
+                }
+
+                bool hasPoint = m_vsc.PointStyle != null;
+
+                if (!hasPoint)
+                {
+                    var pst = ObjectFactory.CreateDefaultPointStyle();
+                    m_vsc.PointStyle = pst;
+                    pointConditionList.SetItem(m_vsc, pst);
+                }
+
+                pointConditionList.AddRule();
+
+            }
+            else
+            {
+                DisplayPoints.Tag = m_vsc.PointStyle;
+                m_vsc.PointStyle = null;
+            }
+
+            if (!m_isUpdating)
+                SignalItemChanged();
+        }
+
+        private void DisplayLines_CheckedChanged(object sender, EventArgs e)
+        {
+            lineConditionList.Visible = DisplayLines.Checked;
+
+            if (DisplayLines.Checked)
+            {
+                if (m_vsc.Items == null)
+                    m_vsc.Items = new BindingList<object>();
+
+                if (DisplayLines.Tag != null)
+                {
+                    m_vsc.LineStyle = (LineTypeStyleType)DisplayLines.Tag;
+                    DisplayLines.Tag = null;
+                }
+
+                bool hasLine = m_vsc.LineStyle != null;
+
+                if (!hasLine)
+                {
+                    var ls = ObjectFactory.CreateDefaultLineStyle();
+                    m_vsc.LineStyle = ls;
+                    lineConditionList.SetItem(m_vsc, ls);
+                }
+
+                lineConditionList.AddRule();
+            }
+            else
+            {
+                DisplayLines.Tag = m_vsc.LineStyle;
+                m_vsc.LineStyle = null;
+            }
+
+            if (!m_isUpdating)
+                SignalItemChanged();
+        }
+
+        private void DisplayAreas_CheckedChanged(object sender, EventArgs e)
+        {
+            areaConditionList.Visible = DisplayAreas.Checked;
+
+            if (DisplayAreas.Checked)
+            {
+                if (m_vsc.Items == null)
+                    m_vsc.Items = new BindingList<object>();
+
+                if (DisplayAreas.Tag != null)
+                {
+                    m_vsc.AreaStyle = (AreaTypeStyleType)DisplayAreas.Tag;
+                    DisplayAreas.Tag = null;
+                }
+
+                bool hasArea = m_vsc.AreaStyle != null;
+
+                if (!hasArea)
+                {
+                    var ast = ObjectFactory.CreateDefaultAreaStyle();
+                    m_vsc.AreaStyle = ast;
+                    areaConditionList.SetItem(m_vsc, ast);
+                }
+
+                areaConditionList.AddRule();
+            }
+            else
+            {
+                DisplayAreas.Tag = m_vsc.AreaStyle;
+                m_vsc.AreaStyle = null;
+            }
+
+            if (!m_isUpdating)
+                SignalItemChanged();
+        }
+
+        private void SignalItemChanged()
+        {
+            if (ItemChanged != null)
+                ItemChanged(m_vsc, null);
+        }
+
+        private void pointConditionList_ItemChanged(object sender, EventArgs e)
+        {
+            SignalItemChanged();
+        }
+
+        private void lineConditionList_ItemChanged(object sender, EventArgs e)
+        {
+            SignalItemChanged();
+        }
+
+        private void areaConditionList_ItemChanged(object sender, EventArgs e)
+        {
+            SignalItemChanged();
+        }
+
+        public int GetPreferedHeight()
+        {
+            int minHeight = DisplayPoints.Height + DisplayLines.Height + DisplayAreas.Height + splitter1.Height + splitter2.Height;
+
+            if (DisplayPoints.Checked)
+                minHeight += pointConditionList.GetPreferedHeight();
+            if (DisplayLines.Checked)
+                minHeight += lineConditionList.GetPreferedHeight();
+            if (DisplayAreas.Checked)
+                minHeight += areaConditionList.GetPreferedHeight();
+
+            return minHeight;
+        }
+
+        public void ResizeAuto()
+        {
+            pointConditionList.ResizeAuto();
+            lineConditionList.ResizeAuto();
+            areaConditionList.ResizeAuto();
+            this.Height = this.GetPreferedHeight();
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeConditions.designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeConditions.designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeConditions.designer.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,134 @@
+namespace Maestro.Editors.LayerDefinition.Vector.Scales
+{
+    partial class ScaleRangeConditions
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ScaleRangeConditions));
+            this.DisplayLines = new System.Windows.Forms.CheckBox();
+            this.lineConditionList = new ConditionListButtons();
+            this.DisplayPoints = new System.Windows.Forms.CheckBox();
+            this.pointConditionList = new ConditionListButtons();
+            this.DisplayAreas = new System.Windows.Forms.CheckBox();
+            this.areaConditionList = new ConditionListButtons();
+            this.splitter1 = new System.Windows.Forms.Splitter();
+            this.splitter2 = new System.Windows.Forms.Splitter();
+            this.SuspendLayout();
+            // 
+            // DisplayLines
+            // 
+            resources.ApplyResources(this.DisplayLines, "DisplayLines");
+            this.DisplayLines.Checked = true;
+            this.DisplayLines.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.DisplayLines.Name = "DisplayLines";
+            this.DisplayLines.UseVisualStyleBackColor = true;
+            this.DisplayLines.CheckedChanged += new System.EventHandler(this.DisplayLines_CheckedChanged);
+            // 
+            // lineConditionList
+            // 
+            resources.ApplyResources(this.lineConditionList, "lineConditionList");
+            this.lineConditionList.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+            this.lineConditionList.Name = "lineConditionList";
+            this.lineConditionList.Owner = null;
+            this.lineConditionList.ItemChanged += new System.EventHandler(this.lineConditionList_ItemChanged);
+            // 
+            // DisplayPoints
+            // 
+            resources.ApplyResources(this.DisplayPoints, "DisplayPoints");
+            this.DisplayPoints.Checked = true;
+            this.DisplayPoints.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.DisplayPoints.Name = "DisplayPoints";
+            this.DisplayPoints.UseVisualStyleBackColor = true;
+            this.DisplayPoints.CheckedChanged += new System.EventHandler(this.DisplayPoints_CheckedChanged);
+            // 
+            // pointConditionList
+            // 
+            resources.ApplyResources(this.pointConditionList, "pointConditionList");
+            this.pointConditionList.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+            this.pointConditionList.Name = "pointConditionList";
+            this.pointConditionList.Owner = null;
+            this.pointConditionList.ItemChanged += new System.EventHandler(this.pointConditionList_ItemChanged);
+            // 
+            // DisplayAreas
+            // 
+            resources.ApplyResources(this.DisplayAreas, "DisplayAreas");
+            this.DisplayAreas.Checked = true;
+            this.DisplayAreas.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.DisplayAreas.Name = "DisplayAreas";
+            this.DisplayAreas.UseVisualStyleBackColor = true;
+            this.DisplayAreas.CheckedChanged += new System.EventHandler(this.DisplayAreas_CheckedChanged);
+            // 
+            // areaConditionList
+            // 
+            resources.ApplyResources(this.areaConditionList, "areaConditionList");
+            this.areaConditionList.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+            this.areaConditionList.Name = "areaConditionList";
+            this.areaConditionList.Owner = null;
+            this.areaConditionList.ItemChanged += new System.EventHandler(this.areaConditionList_ItemChanged);
+            // 
+            // splitter1
+            // 
+            resources.ApplyResources(this.splitter1, "splitter1");
+            this.splitter1.Name = "splitter1";
+            this.splitter1.TabStop = false;
+            // 
+            // splitter2
+            // 
+            resources.ApplyResources(this.splitter2, "splitter2");
+            this.splitter2.Name = "splitter2";
+            this.splitter2.TabStop = false;
+            // 
+            // ScaleRangeConditions
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.areaConditionList);
+            this.Controls.Add(this.DisplayAreas);
+            this.Controls.Add(this.splitter2);
+            this.Controls.Add(this.lineConditionList);
+            this.Controls.Add(this.DisplayLines);
+            this.Controls.Add(this.splitter1);
+            this.Controls.Add(this.pointConditionList);
+            this.Controls.Add(this.DisplayPoints);
+            this.Name = "ScaleRangeConditions";
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.CheckBox DisplayLines;
+        private ConditionListButtons lineConditionList;
+        private ConditionListButtons pointConditionList;
+        private System.Windows.Forms.CheckBox DisplayPoints;
+        private ConditionListButtons areaConditionList;
+        private System.Windows.Forms.CheckBox DisplayAreas;
+        private System.Windows.Forms.Splitter splitter1;
+        private System.Windows.Forms.Splitter splitter2;
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeConditions.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeConditions.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeConditions.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,357 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="DisplayLines.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="DisplayLines.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="DisplayLines.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 113</value>
+  </data>
+  <data name="DisplayLines.Size" type="System.Drawing.Size, System.Drawing">
+    <value>597, 17</value>
+  </data>
+  <data name="DisplayLines.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="DisplayLines.Text" xml:space="preserve">
+    <value>Display lines</value>
+  </data>
+  <data name="&gt;&gt;DisplayLines.Name" xml:space="preserve">
+    <value>DisplayLines</value>
+  </data>
+  <data name="&gt;&gt;DisplayLines.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;DisplayLines.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;DisplayLines.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="lineConditionList.AutoScroll" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="lineConditionList.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="lineConditionList.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 130</value>
+  </data>
+  <data name="lineConditionList.Size" type="System.Drawing.Size, System.Drawing">
+    <value>597, 88</value>
+  </data>
+  <data name="lineConditionList.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="&gt;&gt;lineConditionList.Name" xml:space="preserve">
+    <value>lineConditionList</value>
+  </data>
+  <data name="&gt;&gt;lineConditionList.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.LayerEditorControls.ScaleControls.ConditionListButtons, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4347, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;lineConditionList.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;lineConditionList.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="DisplayPoints.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="DisplayPoints.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="DisplayPoints.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="DisplayPoints.Size" type="System.Drawing.Size, System.Drawing">
+    <value>597, 17</value>
+  </data>
+  <data name="DisplayPoints.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="DisplayPoints.Text" xml:space="preserve">
+    <value>Display points</value>
+  </data>
+  <data name="&gt;&gt;DisplayPoints.Name" xml:space="preserve">
+    <value>DisplayPoints</value>
+  </data>
+  <data name="&gt;&gt;DisplayPoints.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;DisplayPoints.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;DisplayPoints.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="pointConditionList.AutoScroll" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="pointConditionList.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="pointConditionList.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 17</value>
+  </data>
+  <data name="pointConditionList.Size" type="System.Drawing.Size, System.Drawing">
+    <value>597, 88</value>
+  </data>
+  <data name="pointConditionList.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="&gt;&gt;pointConditionList.Name" xml:space="preserve">
+    <value>pointConditionList</value>
+  </data>
+  <data name="&gt;&gt;pointConditionList.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.LayerEditorControls.ScaleControls.ConditionListButtons, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4347, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;pointConditionList.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;pointConditionList.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="DisplayAreas.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="DisplayAreas.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="DisplayAreas.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 226</value>
+  </data>
+  <data name="DisplayAreas.Size" type="System.Drawing.Size, System.Drawing">
+    <value>597, 17</value>
+  </data>
+  <data name="DisplayAreas.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="DisplayAreas.Text" xml:space="preserve">
+    <value>Display areas</value>
+  </data>
+  <data name="&gt;&gt;DisplayAreas.Name" xml:space="preserve">
+    <value>DisplayAreas</value>
+  </data>
+  <data name="&gt;&gt;DisplayAreas.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;DisplayAreas.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;DisplayAreas.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="areaConditionList.AutoScroll" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="areaConditionList.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="areaConditionList.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 243</value>
+  </data>
+  <data name="areaConditionList.Size" type="System.Drawing.Size, System.Drawing">
+    <value>597, 91</value>
+  </data>
+  <data name="areaConditionList.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="&gt;&gt;areaConditionList.Name" xml:space="preserve">
+    <value>areaConditionList</value>
+  </data>
+  <data name="&gt;&gt;areaConditionList.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.LayerEditorControls.ScaleControls.ConditionListButtons, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4347, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;areaConditionList.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;areaConditionList.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="splitter1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="splitter1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 105</value>
+  </data>
+  <data name="splitter1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>597, 8</value>
+  </data>
+  <data name="splitter1.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name="&gt;&gt;splitter1.Name" xml:space="preserve">
+    <value>splitter1</value>
+  </data>
+  <data name="&gt;&gt;splitter1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Splitter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;splitter1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;splitter1.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="splitter2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="splitter2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 218</value>
+  </data>
+  <data name="splitter2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>597, 8</value>
+  </data>
+  <data name="splitter2.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name="&gt;&gt;splitter2.Name" xml:space="preserve">
+    <value>splitter2</value>
+  </data>
+  <data name="&gt;&gt;splitter2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Splitter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;splitter2.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;splitter2.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>597, 334</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>ScaleRangeConditions</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeList.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeList.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeList.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,149 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.MaestroAPI;
+using Maestro.Editors.LayerDefinition.Vector.Scales;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using Maestro.Editors.LayerDefinition;
+
+namespace OSGeo.MapGuide.Maestro.ResourceEditors.LayerEditorControls.ScaleControls
+{
+    public partial class ScaleRangeList : UserControl
+    {
+        private VectorLayerDefinitionType m_vldef;
+        public event EventHandler ItemChanged;
+        public event EventHandler SelectionChanged;
+        private VectorScaleRangeType m_selectedItem;
+        private VectorLayerEditorCtrl m_owner;
+
+        public bool HasUnsupportedItems
+        {
+            get
+            {
+                foreach (ScaleRange sr in this.ControlList.Controls)
+                    if (sr.HasUnsupportedItems)
+                        return true;
+
+                return false;
+            }
+        }
+
+        public VectorLayerEditorCtrl Owner
+        {
+            get { return m_owner; }
+            set 
+            {
+                m_owner = value;
+                foreach (ScaleRange sr in this.ControlList.Controls)
+                    sr.Owner = m_owner;
+            }
+        }
+
+        public ScaleRangeList()
+        {
+            m_selectedItem = null;
+            InitializeComponent();
+        }
+
+        public VectorLayerDefinitionType Item
+        {
+            get { return m_vldef; }
+        }
+
+        public void SetItem(VectorLayerDefinitionType vldef)
+        {
+            ControlList.Controls.Clear();
+            m_vldef = vldef;
+
+            foreach (VectorScaleRangeType sc in m_vldef.VectorScaleRange)
+                AddScaleRange(sc);
+        }
+
+        public VectorScaleRangeType SelectedItem
+        {
+            get
+            {
+                return m_selectedItem;
+            }
+        }
+
+        public ScaleRange AddScaleRange(VectorScaleRangeType sc)
+        {
+            ScaleRange sr = new ScaleRange();
+            sr.Owner = m_owner;
+            sr.SetItem(sc);
+            sr.Dock = DockStyle.Top;
+            ControlList.Controls.Add(sr);
+            sr.BringToFront();
+            sr.ItemChanged += new EventHandler(Scale_ItemChanged);
+            sr.Enter += new EventHandler(Scale_Enter);
+            sr.Leave += new EventHandler(Scale_Leave);
+            return sr;
+        }
+
+        void Scale_Leave(object sender, EventArgs e)
+        {
+            m_selectedItem = null;
+            if (SelectionChanged != null)
+                SelectionChanged(this, null);
+
+            if (sender as ScaleRange != null)
+                (sender as ScaleRange).BackColor = SystemColors.Control;
+        }
+
+        void Scale_Enter(object sender, EventArgs e)
+        {
+            m_selectedItem = sender as ScaleRange == null ? null : (sender as ScaleRange).Item;
+            if (SelectionChanged != null)
+                SelectionChanged(this, null);
+
+            if (sender as ScaleRange != null)
+                (sender as ScaleRange).BackColor = Color.FromArgb(Math.Min(SystemColors.Control.R + 20, 255), Math.Min(SystemColors.Control.G + 20, 255), Math.Min(SystemColors.Control.B + 20, 255));
+        }
+
+        void Scale_ItemChanged(object sender, EventArgs e)
+        {
+            if (ItemChanged != null)
+                ItemChanged(m_vldef, null);
+        }
+
+        public void RemoveScaleRange(VectorScaleRangeType sc)
+        {
+            foreach(ScaleRange sr in ControlList.Controls)
+                if (sr.Item == sc)
+                {
+                    ControlList.Controls.Remove(sr);
+                    break;
+                }
+        }
+
+        public void ResizeAuto()
+        {
+            foreach (ScaleRange sr in ControlList.Controls)
+                sr.ResizeAuto();
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeList.designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeList.designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeList.designer.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,89 @@
+namespace OSGeo.MapGuide.Maestro.ResourceEditors.LayerEditorControls.ScaleControls
+{
+    partial class ScaleRangeList
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ScaleRangeList));
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label1 = new System.Windows.Forms.Label();
+            this.ControlList = new System.Windows.Forms.Panel();
+            this.panel1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this.label3);
+            this.panel1.Controls.Add(this.label2);
+            this.panel1.Controls.Add(this.label1);
+            resources.ApplyResources(this.panel1, "panel1");
+            this.panel1.Name = "panel1";
+            // 
+            // label3
+            // 
+            resources.ApplyResources(this.label3, "label3");
+            this.label3.Name = "label3";
+            // 
+            // label2
+            // 
+            resources.ApplyResources(this.label2, "label2");
+            this.label2.Name = "label2";
+            // 
+            // label1
+            // 
+            resources.ApplyResources(this.label1, "label1");
+            this.label1.Name = "label1";
+            // 
+            // ControlList
+            // 
+            resources.ApplyResources(this.ControlList, "ControlList");
+            this.ControlList.Name = "ControlList";
+            // 
+            // ScaleRangeList
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.ControlList);
+            this.Controls.Add(this.panel1);
+            this.Name = "ScaleRangeList";
+            this.panel1.ResumeLayout(false);
+            this.panel1.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Panel panel1;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Panel ControlList;
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeList.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeList.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Scales/ScaleRangeList.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="label3.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="label3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>160, 8</value>
+  </data>
+  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>90, 13</value>
+  </data>
+  <data name="label3.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="label3.Text" xml:space="preserve">
+    <value>Display properties</value>
+  </data>
+  <data name="&gt;&gt;label3.Name" xml:space="preserve">
+    <value>label3</value>
+  </data>
+  <data name="&gt;&gt;label3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label3.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="label2.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>80, 8</value>
+  </data>
+  <data name="label2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>51, 13</value>
+  </data>
+  <data name="label2.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="label2.Text" xml:space="preserve">
+    <value>Maximum</value>
+  </data>
+  <data name="&gt;&gt;label2.Name" xml:space="preserve">
+    <value>label2</value>
+  </data>
+  <data name="&gt;&gt;label2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label2.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="label1.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 8</value>
+  </data>
+  <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>48, 13</value>
+  </data>
+  <data name="label1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="label1.Text" xml:space="preserve">
+    <value>Minimum</value>
+  </data>
+  <data name="&gt;&gt;label1.Name" xml:space="preserve">
+    <value>label1</value>
+  </data>
+  <data name="&gt;&gt;label1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label1.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>790, 24</value>
+  </data>
+  <data name="panel1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;panel1.Name" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;panel1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;panel1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="ControlList.AutoScroll" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="ControlList.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="ControlList.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 24</value>
+  </data>
+  <data name="ControlList.Size" type="System.Drawing.Size, System.Drawing">
+    <value>790, 377</value>
+  </data>
+  <data name="ControlList.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;ControlList.Name" xml:space="preserve">
+    <value>ControlList</value>
+  </data>
+  <data name="&gt;&gt;ControlList.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ControlList.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;ControlList.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>790, 401</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>ScaleRangeList</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/AreaFeatureStyleEditor.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/AreaFeatureStyleEditor.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/AreaFeatureStyleEditor.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,532 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using OSGeo.MapGuide.ObjectModels.FeatureSource;
+using OSGeo.MapGuide.MaestroAPI.ObjectModels;
+
+namespace Maestro.Editors.LayerDefinition.Vector.StyleEditors
+{
+    internal static class MaestroLegacyCompatibility
+    {
+        
+    }
+
+	/// <summary>
+	/// Summary description for AreaFeatureStyleEditor.
+	/// </summary>
+	public class AreaFeatureStyleEditor : System.Windows.Forms.UserControl
+	{
+		private System.Windows.Forms.ComboBox sizeContextCombo;
+		private System.Windows.Forms.Label label4;
+		private System.Windows.Forms.Label label3;
+		private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.GroupBox groupBox2;
+		private System.Windows.Forms.GroupBox previewGroup;
+		private System.Windows.Forms.PictureBox previewPicture;
+		/// <summary>
+		/// Required designer variable.
+		/// </summary>
+		private System.ComponentModel.Container components = null;
+		private System.Data.DataSet ComboBoxDataSet;
+		private System.Data.DataTable SizeContextTable;
+		private System.Data.DataColumn dataColumn3;
+		private System.Data.DataColumn dataColumn4;
+		private System.Data.DataTable UnitsTable;
+		private System.Data.DataColumn dataColumn5;
+		private System.Data.DataColumn dataColumn6;
+
+		private AreaSymbolizationFillType m_item;
+		private FillStyleEditor fillStyleEditor;
+		private LineStyleEditor lineStyleEditor;
+		private System.Windows.Forms.ComboBox sizeUnitsCombo;
+		private bool m_inUpdate = false;
+
+		private FillType previousFill = null;
+		private StrokeType previousStroke = null;
+
+		public event EventHandler Changed;
+
+        private IEditorService m_editor;
+        private FeatureSourceDescription.FeatureSourceSchema m_schema;
+        private string m_featureSource;
+        private string m_providername;
+
+        public AreaFeatureStyleEditor(IEditorService editor, FeatureSourceDescription.FeatureSourceSchema schema, string featureSource)
+            : this()
+        {
+            m_editor = editor;
+            m_schema = schema;
+
+            var fs = (FeatureSourceType)m_editor.ResourceService.GetResource(featureSource);
+
+            m_providername = fs.Provider;
+            m_featureSource = featureSource;
+        }
+
+        private AreaFeatureStyleEditor()
+        {
+            //
+            // Required for Windows Form Designer support
+            //
+            InitializeComponent();
+            using (System.IO.StringReader sr = new System.IO.StringReader(Properties.Resources.GeometryStyleComboDataset))
+                ComboBoxDataSet.ReadXml(sr);
+
+            fillStyleEditor.displayFill.CheckedChanged += new EventHandler(displayFill_CheckedChanged);
+            fillStyleEditor.fillCombo.SelectedIndexChanged += new EventHandler(fillCombo_SelectedIndexChanged);
+            fillStyleEditor.foregroundColor.CurrentColorChanged += new EventHandler(foregroundColor_CurrentColorChanged);
+            fillStyleEditor.backgroundColor.CurrentColorChanged += new EventHandler(backgroundColor_CurrentColorChanged);
+
+            lineStyleEditor.displayLine.CheckedChanged += new EventHandler(displayLine_CheckedChanged);
+            lineStyleEditor.thicknessCombo.SelectedIndexChanged += new EventHandler(thicknessCombo_SelectedIndexChanged);
+            lineStyleEditor.thicknessCombo.TextChanged += new EventHandler(thicknessCombo_TextChanged);
+            lineStyleEditor.colorCombo.CurrentColorChanged += new EventHandler(colorCombo_CurrentColorChanged);
+            lineStyleEditor.fillCombo.SelectedIndexChanged += new EventHandler(fillCombo_Line_SelectedIndexChanged);
+        }
+
+		/// <summary>
+		/// Clean up any resources being used.
+		/// </summary>
+		protected override void Dispose( bool disposing )
+		{
+			if( disposing )
+			{
+				if(components != null)
+				{
+					components.Dispose();
+				}
+			}
+			base.Dispose( disposing );
+		}
+
+		#region Windows Form Designer generated code
+		/// <summary>
+		/// Required method for Designer support - do not modify
+		/// the contents of this method with the code editor.
+		/// </summary>
+		private void InitializeComponent()
+		{
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AreaFeatureStyleEditor));
+            this.fillStyleEditor = new FillStyleEditor();
+            this.lineStyleEditor = new LineStyleEditor();
+            this.sizeUnitsCombo = new System.Windows.Forms.ComboBox();
+            this.UnitsTable = new System.Data.DataTable();
+            this.dataColumn5 = new System.Data.DataColumn();
+            this.dataColumn6 = new System.Data.DataColumn();
+            this.sizeContextCombo = new System.Windows.Forms.ComboBox();
+            this.SizeContextTable = new System.Data.DataTable();
+            this.dataColumn3 = new System.Data.DataColumn();
+            this.dataColumn4 = new System.Data.DataColumn();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.groupBox2 = new System.Windows.Forms.GroupBox();
+            this.previewGroup = new System.Windows.Forms.GroupBox();
+            this.previewPicture = new System.Windows.Forms.PictureBox();
+            this.ComboBoxDataSet = new System.Data.DataSet();
+            ((System.ComponentModel.ISupportInitialize)(this.UnitsTable)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.SizeContextTable)).BeginInit();
+            this.groupBox1.SuspendLayout();
+            this.groupBox2.SuspendLayout();
+            this.previewGroup.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.previewPicture)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboBoxDataSet)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // fillStyleEditor
+            // 
+            resources.ApplyResources(this.fillStyleEditor, "fillStyleEditor");
+            this.fillStyleEditor.Name = "fillStyleEditor";
+            // 
+            // lineStyleEditor
+            // 
+            resources.ApplyResources(this.lineStyleEditor, "lineStyleEditor");
+            this.lineStyleEditor.Name = "lineStyleEditor";
+            // 
+            // sizeUnitsCombo
+            // 
+            resources.ApplyResources(this.sizeUnitsCombo, "sizeUnitsCombo");
+            this.sizeUnitsCombo.DataSource = this.UnitsTable;
+            this.sizeUnitsCombo.DisplayMember = "Display";
+            this.sizeUnitsCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.sizeUnitsCombo.Name = "sizeUnitsCombo";
+            this.sizeUnitsCombo.ValueMember = "Value";
+            this.sizeUnitsCombo.SelectedIndexChanged += new System.EventHandler(this.sizeUnitsCombo_SelectedIndexChanged);
+            // 
+            // UnitsTable
+            // 
+            this.UnitsTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn5,
+            this.dataColumn6});
+            this.UnitsTable.TableName = "Units";
+            // 
+            // dataColumn5
+            // 
+            this.dataColumn5.Caption = "Display";
+            this.dataColumn5.ColumnName = "Display";
+            // 
+            // dataColumn6
+            // 
+            this.dataColumn6.Caption = "Value";
+            this.dataColumn6.ColumnName = "Value";
+            // 
+            // sizeContextCombo
+            // 
+            resources.ApplyResources(this.sizeContextCombo, "sizeContextCombo");
+            this.sizeContextCombo.DataSource = this.SizeContextTable;
+            this.sizeContextCombo.DisplayMember = "Display";
+            this.sizeContextCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.sizeContextCombo.Name = "sizeContextCombo";
+            this.sizeContextCombo.ValueMember = "Value";
+            this.sizeContextCombo.SelectedIndexChanged += new System.EventHandler(this.sizeContextCombo_SelectedIndexChanged);
+            // 
+            // SizeContextTable
+            // 
+            this.SizeContextTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn3,
+            this.dataColumn4});
+            this.SizeContextTable.TableName = "SizeContext";
+            // 
+            // dataColumn3
+            // 
+            this.dataColumn3.Caption = "Display";
+            this.dataColumn3.ColumnName = "Display";
+            // 
+            // dataColumn4
+            // 
+            this.dataColumn4.Caption = "Value";
+            this.dataColumn4.ColumnName = "Value";
+            // 
+            // label4
+            // 
+            resources.ApplyResources(this.label4, "label4");
+            this.label4.Name = "label4";
+            // 
+            // label3
+            // 
+            resources.ApplyResources(this.label3, "label3");
+            this.label3.Name = "label3";
+            // 
+            // groupBox1
+            // 
+            resources.ApplyResources(this.groupBox1, "groupBox1");
+            this.groupBox1.Controls.Add(this.sizeUnitsCombo);
+            this.groupBox1.Controls.Add(this.sizeContextCombo);
+            this.groupBox1.Controls.Add(this.label4);
+            this.groupBox1.Controls.Add(this.label3);
+            this.groupBox1.Controls.Add(this.lineStyleEditor);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.TabStop = false;
+            // 
+            // groupBox2
+            // 
+            resources.ApplyResources(this.groupBox2, "groupBox2");
+            this.groupBox2.Controls.Add(this.fillStyleEditor);
+            this.groupBox2.Name = "groupBox2";
+            this.groupBox2.TabStop = false;
+            // 
+            // previewGroup
+            // 
+            resources.ApplyResources(this.previewGroup, "previewGroup");
+            this.previewGroup.Controls.Add(this.previewPicture);
+            this.previewGroup.Name = "previewGroup";
+            this.previewGroup.TabStop = false;
+            // 
+            // previewPicture
+            // 
+            resources.ApplyResources(this.previewPicture, "previewPicture");
+            this.previewPicture.BackColor = System.Drawing.Color.White;
+            this.previewPicture.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.previewPicture.Name = "previewPicture";
+            this.previewPicture.TabStop = false;
+            this.previewPicture.Paint += new System.Windows.Forms.PaintEventHandler(this.previewPicture_Paint);
+            // 
+            // ComboBoxDataSet
+            // 
+            this.ComboBoxDataSet.DataSetName = "ComboBoxDataSet";
+            this.ComboBoxDataSet.Locale = new System.Globalization.CultureInfo("da-DK");
+            this.ComboBoxDataSet.Tables.AddRange(new System.Data.DataTable[] {
+            this.SizeContextTable,
+            this.UnitsTable});
+            // 
+            // AreaFeatureStyleEditor
+            // 
+            resources.ApplyResources(this, "$this");
+            this.Controls.Add(this.previewGroup);
+            this.Controls.Add(this.groupBox2);
+            this.Controls.Add(this.groupBox1);
+            this.Name = "AreaFeatureStyleEditor";
+            this.Load += new System.EventHandler(this.AreaFeatureStyleEditor_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.UnitsTable)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.SizeContextTable)).EndInit();
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox2.ResumeLayout(false);
+            this.previewGroup.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.previewPicture)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboBoxDataSet)).EndInit();
+            this.ResumeLayout(false);
+
+		}
+		#endregion
+
+		private void AreaFeatureStyleEditor_Load(object sender, System.EventArgs e)
+		{
+			//UpdateDisplay();
+		}
+
+		private void UpdateDisplay()
+		{
+			if (m_inUpdate)
+				return;
+
+			try
+			{
+                m_inUpdate = true;
+                
+                if (m_item == null)
+				{
+					fillStyleEditor.displayFill.Checked = false;
+					lineStyleEditor.displayLine.Checked = false;
+					return;
+				}
+
+				fillStyleEditor.displayFill.Checked = m_item.Fill != null;
+				if (m_item.Fill != null)
+				{
+                    fillStyleEditor.foregroundColor.CurrentColor = Utility.ParseHTMLColor(m_item.Fill.ForegroundColor);
+                    fillStyleEditor.backgroundColor.CurrentColor = Utility.ParseHTMLColor(m_item.Fill.BackgroundColor);
+
+					fillStyleEditor.fillCombo.SelectedValue = m_item.Fill.FillPattern;
+					if (fillStyleEditor.fillCombo.SelectedItem == null && fillStyleEditor.fillCombo.Items.Count > 0)
+						fillStyleEditor.fillCombo.SelectedIndex = fillStyleEditor.fillCombo.FindString(m_item.Fill.FillPattern);
+				}
+				
+				lineStyleEditor.displayLine.Checked = m_item.Stroke != null;
+				if (m_item.Stroke != null)
+				{
+					sizeUnitsCombo.SelectedValue = m_item.Stroke.Unit.ToString();
+                    //sizeContextCombo.SelectedValue = m_item.Stroke.SizeContext.ToString();
+                    if (!string.IsNullOrEmpty(m_item.Stroke.Color))
+                        lineStyleEditor.colorCombo.CurrentColor = Utility.ParseHTMLColor(m_item.Stroke.Color);
+					lineStyleEditor.fillCombo.SelectedIndex = lineStyleEditor.fillCombo.FindString(m_item.Stroke.LineStyle);
+                    lineStyleEditor.thicknessCombo.Text = m_item.Stroke.Thickness;
+				}
+
+				previewPicture.Refresh();
+			} 
+			finally
+			{
+				m_inUpdate = false;
+			}
+		}
+
+		private void previewPicture_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
+		{
+			FeaturePreviewRender.RenderPreviewArea(e.Graphics, new Rectangle(1, 1, previewPicture.Width - 4, previewPicture.Height - 4), m_item);
+		}
+
+		public AreaSymbolizationFillType Item 
+		{
+			get { return m_item; }
+			set
+			{
+				m_item = value;
+				UpdateDisplay();
+			}
+		}
+
+		private void fillCombo_SelectedIndexChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+			m_item.Fill.FillPattern = fillStyleEditor.fillCombo.Text;
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void displayFill_CheckedChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+			if (fillStyleEditor.displayFill.Checked)
+				m_item.Fill = previousFill == null ? ObjectFactory.CreateDefaultFill() : previousFill;
+			else
+			{
+				if (m_item.Fill != null)
+					previousFill = m_item.Fill;
+				m_item.Fill = null;
+			}
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void foregroundColor_CurrentColorChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+            m_item.Fill.ForegroundColor = Utility.SerializeHTMLColor(fillStyleEditor.foregroundColor.CurrentColor, true);
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void backgroundColor_CurrentColorChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+            m_item.Fill.BackgroundColor = Utility.SerializeHTMLColor(fillStyleEditor.backgroundColor.CurrentColor, true);
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void displayLine_CheckedChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+			if (lineStyleEditor.displayLine.Checked)
+				m_item.Stroke = previousStroke == null ? ObjectFactory.CreateDefaultStroke() : previousStroke;
+			else
+			{
+				if (m_item.Stroke != null)
+					previousStroke = m_item.Stroke;
+				m_item.Stroke = null;
+			}
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void colorCombo_CurrentColorChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+            m_item.Stroke.Color = Utility.SerializeHTMLColor(lineStyleEditor.colorCombo.CurrentColor, true);
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void fillCombo_Line_SelectedIndexChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+			//TODO: Validate
+			m_item.Stroke.LineStyle = lineStyleEditor.fillCombo.Text;
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+        private void thicknessCombo_TextChanged(object sender, EventArgs e)
+        {
+            if (m_inUpdate || lineStyleEditor.thicknessCombo.SelectedIndex != -1)
+                return;
+
+            //TODO: Validate
+            m_item.Stroke.Thickness = lineStyleEditor.thicknessCombo.Text;
+            previewPicture.Refresh();
+            if (Changed != null)
+                Changed(this, new EventArgs());
+        }
+
+        private void thicknessCombo_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (m_inUpdate || lineStyleEditor.thicknessCombo.SelectedIndex != lineStyleEditor.thicknessCombo.Items.Count - 1)
+                return;
+
+            string current = null;
+            current = m_item.Stroke.Thickness;
+
+            string expr = null;
+            if (current != null)
+            {
+                expr = m_editor.EditExpression(current, m_schema, m_providername, m_featureSource);
+                if (!string.IsNullOrEmpty(expr))
+                    current = expr;
+            }
+
+            //This is required as we cannot update the text from within the SelectedIndexChanged event :(
+            BeginInvoke(new UpdateComboTextFromSelectChangedDelegate(UpdateComboTextFromSelectChanged), lineStyleEditor.thicknessCombo, current, expr != null);
+        }
+
+        internal void SetupForTheming()
+        {
+            fillStyleEditor.foregroundColor.Enabled =
+            fillStyleEditor.lblForeground.Enabled =
+            fillStyleEditor.displayFill.Enabled =
+                false;
+        }
+
+        public delegate void UpdateComboTextFromSelectChangedDelegate(ComboBox owner, string text, bool userChange);
+
+        private void UpdateComboTextFromSelectChanged(ComboBox owner, string text, bool userChange)
+        {
+            try
+            {
+                if (!userChange)
+                    m_inUpdate = true;
+                owner.SelectedIndex = -1;
+
+                //HACK: Odd bug, don't remove
+                if (owner.SelectedIndex != -1)
+                    owner.SelectedIndex = -1;
+
+                owner.Text = text;
+            }
+            finally
+            {
+                if (!userChange)
+                    m_inUpdate = false;
+            }
+        }
+
+        private void sizeContextCombo_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (m_inUpdate || m_item.Stroke == null)
+                return;
+
+            //m_item.Stroke.SizeContext = (SizeContextType)Enum.Parse(typeof(SizeContextType), (string)sizeContextCombo.SelectedValue);
+        }
+
+        private void sizeUnitsCombo_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (m_inUpdate || m_item.Stroke == null)
+                return;
+
+            m_item.Stroke.Unit = (LengthUnitType)Enum.Parse(typeof(LengthUnitType), (string)sizeUnitsCombo.SelectedValue);
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/AreaFeatureStyleEditor.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/AreaFeatureStyleEditor.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/AreaFeatureStyleEditor.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,447 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="fillStyleEditor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="fillStyleEditor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 16</value>
+  </data>
+  <data name="fillStyleEditor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>274, 144</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="fillStyleEditor.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;fillStyleEditor.Name" xml:space="preserve">
+    <value>fillStyleEditor</value>
+  </data>
+  <data name="&gt;&gt;fillStyleEditor.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.FillStyleEditor, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4480, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;fillStyleEditor.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name="&gt;&gt;fillStyleEditor.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="lineStyleEditor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="lineStyleEditor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 16</value>
+  </data>
+  <data name="lineStyleEditor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>274, 136</value>
+  </data>
+  <data name="lineStyleEditor.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;lineStyleEditor.Name" xml:space="preserve">
+    <value>lineStyleEditor</value>
+  </data>
+  <data name="&gt;&gt;lineStyleEditor.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.LineStyleEditor, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4480, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;lineStyleEditor.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;lineStyleEditor.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="sizeUnitsCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="sizeUnitsCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>136, 184</value>
+  </data>
+  <data name="sizeUnitsCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>154, 21</value>
+  </data>
+  <data name="sizeUnitsCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>13</value>
+  </data>
+  <data name="&gt;&gt;sizeUnitsCombo.Name" xml:space="preserve">
+    <value>sizeUnitsCombo</value>
+  </data>
+  <data name="&gt;&gt;sizeUnitsCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;sizeUnitsCombo.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;sizeUnitsCombo.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="sizeContextCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="sizeContextCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>136, 152</value>
+  </data>
+  <data name="sizeContextCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>154, 21</value>
+  </data>
+  <data name="sizeContextCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name="&gt;&gt;sizeContextCombo.Name" xml:space="preserve">
+    <value>sizeContextCombo</value>
+  </data>
+  <data name="&gt;&gt;sizeContextCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;sizeContextCombo.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;sizeContextCombo.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="label4.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 184</value>
+  </data>
+  <data name="label4.Size" type="System.Drawing.Size, System.Drawing">
+    <value>88, 16</value>
+  </data>
+  <data name="label4.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name="label4.Text" xml:space="preserve">
+    <value>Units</value>
+  </data>
+  <data name="&gt;&gt;label4.Name" xml:space="preserve">
+    <value>label4</value>
+  </data>
+  <data name="&gt;&gt;label4.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label4.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="label3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 152</value>
+  </data>
+  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>88, 16</value>
+  </data>
+  <data name="label3.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="label3.Text" xml:space="preserve">
+    <value>Size context</value>
+  </data>
+  <data name="&gt;&gt;label3.Name" xml:space="preserve">
+    <value>label3</value>
+  </data>
+  <data name="&gt;&gt;label3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label3.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="groupBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 176</value>
+  </data>
+  <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>298, 208</value>
+  </data>
+  <data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
+    <value>14</value>
+  </data>
+  <data name="groupBox1.Text" xml:space="preserve">
+    <value>Edge style</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="groupBox2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>298, 168</value>
+  </data>
+  <data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
+    <value>15</value>
+  </data>
+  <data name="groupBox2.Text" xml:space="preserve">
+    <value>Fill style</value>
+  </data>
+  <data name="&gt;&gt;groupBox2.Name" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name="&gt;&gt;groupBox2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;groupBox2.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;groupBox2.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="previewGroup.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Name" xml:space="preserve">
+    <value>previewPicture</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Type" xml:space="preserve">
+    <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Parent" xml:space="preserve">
+    <value>previewGroup</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="previewGroup.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 392</value>
+  </data>
+  <data name="previewGroup.Size" type="System.Drawing.Size, System.Drawing">
+    <value>298, 48</value>
+  </data>
+  <data name="previewGroup.TabIndex" type="System.Int32, mscorlib">
+    <value>19</value>
+  </data>
+  <data name="previewGroup.Text" xml:space="preserve">
+    <value>Preview</value>
+  </data>
+  <data name="&gt;&gt;previewGroup.Name" xml:space="preserve">
+    <value>previewGroup</value>
+  </data>
+  <data name="&gt;&gt;previewGroup.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;previewGroup.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;previewGroup.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="previewPicture.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="previewPicture.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 16</value>
+  </data>
+  <data name="previewPicture.Size" type="System.Drawing.Size, System.Drawing">
+    <value>282, 24</value>
+  </data>
+  <data name="previewPicture.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Name" xml:space="preserve">
+    <value>previewPicture</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Type" xml:space="preserve">
+    <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Parent" xml:space="preserve">
+    <value>previewGroup</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="ComboBoxDataSet.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScroll" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="$this.AutoScrollMinSize" type="System.Drawing.Size, System.Drawing">
+    <value>300, 440</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>300, 440</value>
+  </data>
+  <data name="&gt;&gt;UnitsTable.Name" xml:space="preserve">
+    <value>UnitsTable</value>
+  </data>
+  <data name="&gt;&gt;UnitsTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn5.Name" xml:space="preserve">
+    <value>dataColumn5</value>
+  </data>
+  <data name="&gt;&gt;dataColumn5.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn6.Name" xml:space="preserve">
+    <value>dataColumn6</value>
+  </data>
+  <data name="&gt;&gt;dataColumn6.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;SizeContextTable.Name" xml:space="preserve">
+    <value>SizeContextTable</value>
+  </data>
+  <data name="&gt;&gt;SizeContextTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn3.Name" xml:space="preserve">
+    <value>dataColumn3</value>
+  </data>
+  <data name="&gt;&gt;dataColumn3.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn4.Name" xml:space="preserve">
+    <value>dataColumn4</value>
+  </data>
+  <data name="&gt;&gt;dataColumn4.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ComboBoxDataSet.Name" xml:space="preserve">
+    <value>ComboBoxDataSet</value>
+  </data>
+  <data name="&gt;&gt;ComboBoxDataSet.Type" xml:space="preserve">
+    <value>System.Data.DataSet, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>AreaFeatureStyleEditor</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FillStyleEditor.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FillStyleEditor.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FillStyleEditor.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,185 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Windows.Forms;
+using Maestro.Editors.Common;
+
+namespace Maestro.Editors.LayerDefinition.Vector.StyleEditors
+{
+	/// <summary>
+	/// Summary description for FillStyleEditor.
+	/// </summary>
+	public class FillStyleEditor : System.Windows.Forms.UserControl
+    {
+		public ImageStylePicker fillCombo;
+
+		public System.Windows.Forms.CheckBox displayFill;
+        private System.Windows.Forms.Label lblBackground;
+        public Label lblForeground;
+        private System.Windows.Forms.Label lblFill;
+        public ColorComboWithTransparency foregroundColor;
+        public Label lblForegroundTransparency;
+        public ColorComboWithTransparency backgroundColor;
+        public Label lblBackgroundTransparency;
+
+		/// <summary> 
+		/// Required designer variable.
+		/// </summary>
+		private System.ComponentModel.Container components = null;
+
+		public FillStyleEditor()
+		{
+			// This call is required by the Windows.Forms Form Designer.
+			InitializeComponent();
+        
+            fillCombo.Items.Clear();
+            fillCombo.Items.AddRange(FeaturePreviewRender.FillImages);
+        }
+
+		/// <summary> 
+		/// Clean up any resources being used.
+		/// </summary>
+		protected override void Dispose( bool disposing )
+		{
+			if( disposing )
+			{
+				if(components != null)
+				{
+					components.Dispose();
+				}
+			}
+			base.Dispose( disposing );
+		}
+
+		#region Component Designer generated code
+		/// <summary> 
+		/// Required method for Designer support - do not modify 
+		/// the contents of this method with the code editor.
+		/// </summary>
+		private void InitializeComponent()
+		{
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FillStyleEditor));
+            this.lblBackground = new System.Windows.Forms.Label();
+            this.lblForeground = new System.Windows.Forms.Label();
+            this.lblFill = new System.Windows.Forms.Label();
+            this.fillCombo = new ImageStylePicker();
+            this.displayFill = new System.Windows.Forms.CheckBox();
+            this.foregroundColor = new ColorComboWithTransparency();
+            this.lblForegroundTransparency = new System.Windows.Forms.Label();
+            this.backgroundColor = new ColorComboWithTransparency();
+            this.lblBackgroundTransparency = new System.Windows.Forms.Label();
+            this.SuspendLayout();
+            // 
+            // lblBackground
+            // 
+            resources.ApplyResources(this.lblBackground, "lblBackground");
+            this.lblBackground.Name = "lblBackground";
+            // 
+            // lblForeground
+            // 
+            resources.ApplyResources(this.lblForeground, "lblForeground");
+            this.lblForeground.Name = "lblForeground";
+            // 
+            // lblFill
+            // 
+            resources.ApplyResources(this.lblFill, "lblFill");
+            this.lblFill.Name = "lblFill";
+            // 
+            // fillCombo
+            // 
+            resources.ApplyResources(this.fillCombo, "fillCombo");
+            this.fillCombo.DisplayMember = "Name";
+            this.fillCombo.Name = "fillCombo";
+            this.fillCombo.TextWidth = 50;
+            this.fillCombo.ValueMember = "Name";
+            // 
+            // displayFill
+            // 
+            this.displayFill.Checked = true;
+            this.displayFill.CheckState = System.Windows.Forms.CheckState.Checked;
+            resources.ApplyResources(this.displayFill, "displayFill");
+            this.displayFill.Name = "displayFill";
+            this.displayFill.CheckedChanged += new System.EventHandler(this.displayFill_CheckedChanged);
+            // 
+            // foregroundColor
+            // 
+            resources.ApplyResources(this.foregroundColor, "foregroundColor");
+            this.foregroundColor.CurrentColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
+            this.foregroundColor.Name = "foregroundColor";
+            // 
+            // lblForegroundTransparency
+            // 
+            resources.ApplyResources(this.lblForegroundTransparency, "lblForegroundTransparency");
+            this.lblForegroundTransparency.Name = "lblForegroundTransparency";
+            // 
+            // backgroundColor
+            // 
+            resources.ApplyResources(this.backgroundColor, "backgroundColor");
+            this.backgroundColor.CurrentColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
+            this.backgroundColor.Name = "backgroundColor";
+            // 
+            // lblBackgroundTransparency
+            // 
+            resources.ApplyResources(this.lblBackgroundTransparency, "lblBackgroundTransparency");
+            this.lblBackgroundTransparency.Name = "lblBackgroundTransparency";
+            // 
+            // FillStyleEditor
+            // 
+            this.Controls.Add(this.lblBackgroundTransparency);
+            this.Controls.Add(this.backgroundColor);
+            this.Controls.Add(this.lblForegroundTransparency);
+            this.Controls.Add(this.foregroundColor);
+            this.Controls.Add(this.displayFill);
+            this.Controls.Add(this.fillCombo);
+            this.Controls.Add(this.lblBackground);
+            this.Controls.Add(this.lblForeground);
+            this.Controls.Add(this.lblFill);
+            this.Name = "FillStyleEditor";
+            resources.ApplyResources(this, "$this");
+            this.Load += new System.EventHandler(this.FillStyleEditor_Load);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+		}
+		#endregion
+
+		private void FillStyleEditor_Load(object sender, System.EventArgs e)
+		{
+		}
+
+		private void displayFill_CheckedChanged(object sender, System.EventArgs e)
+		{
+			lblFill.Enabled = 
+			lblForeground.Enabled = 
+			lblBackground.Enabled = 
+            lblForegroundTransparency.Enabled = 
+            lblBackgroundTransparency.Enabled =
+			fillCombo.Enabled =
+			foregroundColor.Enabled =
+			backgroundColor.Enabled = 
+				displayFill.Checked;
+		}
+
+	}
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FillStyleEditor.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FillStyleEditor.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FillStyleEditor.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,375 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="lblBackground.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="lblBackground.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 104</value>
+  </data>
+  <data name="lblBackground.Size" type="System.Drawing.Size, System.Drawing">
+    <value>91, 13</value>
+  </data>
+  <data name="lblBackground.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="lblBackground.Text" xml:space="preserve">
+    <value>Background color</value>
+  </data>
+  <data name="&gt;&gt;lblBackground.Name" xml:space="preserve">
+    <value>lblBackground</value>
+  </data>
+  <data name="&gt;&gt;lblBackground.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;lblBackground.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;lblBackground.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="lblForeground.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="lblForeground.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 48</value>
+  </data>
+  <data name="lblForeground.Size" type="System.Drawing.Size, System.Drawing">
+    <value>87, 13</value>
+  </data>
+  <data name="lblForeground.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="lblForeground.Text" xml:space="preserve">
+    <value>Foreground color</value>
+  </data>
+  <data name="&gt;&gt;lblForeground.Name" xml:space="preserve">
+    <value>lblForeground</value>
+  </data>
+  <data name="&gt;&gt;lblForeground.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;lblForeground.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;lblForeground.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="lblFill.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="lblFill.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 24</value>
+  </data>
+  <data name="lblFill.Size" type="System.Drawing.Size, System.Drawing">
+    <value>55, 13</value>
+  </data>
+  <data name="lblFill.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="lblFill.Text" xml:space="preserve">
+    <value>Fill pattern</value>
+  </data>
+  <data name="&gt;&gt;lblFill.Name" xml:space="preserve">
+    <value>lblFill</value>
+  </data>
+  <data name="&gt;&gt;lblFill.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;lblFill.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;lblFill.ZOrder" xml:space="preserve">
+    <value>8</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="fillCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="fillCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>120, 16</value>
+  </data>
+  <data name="fillCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>184, 21</value>
+  </data>
+  <data name="fillCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name="&gt;&gt;fillCombo.Name" xml:space="preserve">
+    <value>fillCombo</value>
+  </data>
+  <data name="&gt;&gt;fillCombo.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.ImageStylePicker, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4358, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;fillCombo.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;fillCombo.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="displayFill.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
+    <value>System</value>
+  </data>
+  <data name="displayFill.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="displayFill.Size" type="System.Drawing.Size, System.Drawing">
+    <value>168, 16</value>
+  </data>
+  <data name="displayFill.TabIndex" type="System.Int32, mscorlib">
+    <value>13</value>
+  </data>
+  <data name="displayFill.Text" xml:space="preserve">
+    <value>Display fill</value>
+  </data>
+  <data name="&gt;&gt;displayFill.Name" xml:space="preserve">
+    <value>displayFill</value>
+  </data>
+  <data name="&gt;&gt;displayFill.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;displayFill.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;displayFill.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="foregroundColor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="foregroundColor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>120, 40</value>
+  </data>
+  <data name="foregroundColor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>184, 49</value>
+  </data>
+  <data name="foregroundColor.TabIndex" type="System.Int32, mscorlib">
+    <value>14</value>
+  </data>
+  <data name="&gt;&gt;foregroundColor.Name" xml:space="preserve">
+    <value>foregroundColor</value>
+  </data>
+  <data name="&gt;&gt;foregroundColor.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.ColorComboWithTransparency, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4358, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;foregroundColor.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;foregroundColor.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="lblForegroundTransparency.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="lblForegroundTransparency.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="lblForegroundTransparency.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 72</value>
+  </data>
+  <data name="lblForegroundTransparency.Size" type="System.Drawing.Size, System.Drawing">
+    <value>72, 13</value>
+  </data>
+  <data name="lblForegroundTransparency.TabIndex" type="System.Int32, mscorlib">
+    <value>15</value>
+  </data>
+  <data name="lblForegroundTransparency.Text" xml:space="preserve">
+    <value>Transparency</value>
+  </data>
+  <data name="&gt;&gt;lblForegroundTransparency.Name" xml:space="preserve">
+    <value>lblForegroundTransparency</value>
+  </data>
+  <data name="&gt;&gt;lblForegroundTransparency.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;lblForegroundTransparency.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;lblForegroundTransparency.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="backgroundColor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="backgroundColor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>120, 96</value>
+  </data>
+  <data name="backgroundColor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>184, 49</value>
+  </data>
+  <data name="backgroundColor.TabIndex" type="System.Int32, mscorlib">
+    <value>16</value>
+  </data>
+  <data name="&gt;&gt;backgroundColor.Name" xml:space="preserve">
+    <value>backgroundColor</value>
+  </data>
+  <data name="&gt;&gt;backgroundColor.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.ColorComboWithTransparency, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4358, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;backgroundColor.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;backgroundColor.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="lblBackgroundTransparency.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="lblBackgroundTransparency.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="lblBackgroundTransparency.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 128</value>
+  </data>
+  <data name="lblBackgroundTransparency.Size" type="System.Drawing.Size, System.Drawing">
+    <value>72, 13</value>
+  </data>
+  <data name="lblBackgroundTransparency.TabIndex" type="System.Int32, mscorlib">
+    <value>17</value>
+  </data>
+  <data name="lblBackgroundTransparency.Text" xml:space="preserve">
+    <value>Transparency</value>
+  </data>
+  <data name="&gt;&gt;lblBackgroundTransparency.Name" xml:space="preserve">
+    <value>lblBackgroundTransparency</value>
+  </data>
+  <data name="&gt;&gt;lblBackgroundTransparency.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;lblBackgroundTransparency.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;lblBackgroundTransparency.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>304, 150</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>FillStyleEditor</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FontStyleEditor.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FontStyleEditor.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FontStyleEditor.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,1044 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using Maestro.Editors.Common;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.ObjectModels.FeatureSource;
+using OSGeo.MapGuide.MaestroAPI.ObjectModels;
+
+namespace Maestro.Editors.LayerDefinition.Vector.StyleEditors
+{
+	/// <summary>
+	/// Summary description for FontStyleEditor.
+	/// </summary>
+	public class FontStyleEditor : System.Windows.Forms.UserControl
+	{
+		private System.Windows.Forms.Label label1;
+		private System.Windows.Forms.Label label2;
+		private System.Windows.Forms.Label label3;
+		private System.Windows.Forms.Label label4;
+		private System.Windows.Forms.Label label5;
+		private System.Windows.Forms.Label label6;
+		private System.Windows.Forms.Panel panel1;
+		private System.Windows.Forms.Label label7;
+		private System.Windows.Forms.Label label8;
+		private System.Windows.Forms.Label label9;
+		private System.Windows.Forms.Label label10;
+		private System.Windows.Forms.GroupBox fontGroup;
+		private System.Windows.Forms.GroupBox colorGroup;
+		private System.Windows.Forms.GroupBox alignmentGroup;
+		private System.Windows.Forms.PictureBox previewPicture;
+		private System.Windows.Forms.ComboBox sizeCombo;
+		private System.Windows.Forms.ComboBox unitsCombo;
+		private System.Windows.Forms.ComboBox sizeContextCombo;
+		private System.Windows.Forms.ComboBox fontCombo;
+		private System.Windows.Forms.ComboBox propertyCombo;
+		private System.Windows.Forms.CheckBox underlineCheck;
+		private System.Windows.Forms.CheckBox italicCheck;
+		private System.Windows.Forms.CheckBox boldCheck;
+        private System.Windows.Forms.ComboBox backgroundTypeCombo;
+		private System.Windows.Forms.ComboBox rotationCombo;
+		internal System.Windows.Forms.ComboBox verticalCombo;
+		internal System.Windows.Forms.ComboBox horizontalCombo;
+		private System.Windows.Forms.GroupBox previewGroup;
+		private System.Data.DataSet ComboBoxDataSet;
+		private System.Data.DataColumn dataColumn1;
+		private System.Data.DataColumn dataColumn2;
+		private System.Data.DataTable SizeContextTable;
+		private System.Data.DataColumn dataColumn3;
+		private System.Data.DataColumn dataColumn4;
+		private System.Data.DataTable UnitsTable;
+		private System.Data.DataColumn dataColumn5;
+		private System.Data.DataColumn dataColumn6;
+		private System.Data.DataTable RotationTable;
+		private System.Data.DataColumn dataColumn7;
+		private System.Data.DataColumn dataColumn8;
+		private System.Data.DataTable BackgroundTypeTable;
+		private System.Data.DataColumn dataColumn9;
+		private System.Data.DataColumn dataColumn10;
+		private System.Data.DataTable HorizontalTable;
+		private System.Data.DataColumn dataColumn11;
+		private System.Data.DataColumn dataColumn12;
+		private System.Data.DataTable VerticalTable;
+		private System.Data.DataColumn dataColumn13;
+		private System.Data.DataColumn dataColumn14;
+		private System.Data.DataTable FontTable;
+		/// <summary>
+		/// Required designer variable.
+		/// </summary>
+		private System.ComponentModel.Container components = null;
+
+		private TextSymbolType m_item;
+		internal System.Windows.Forms.Label verticalLabel;
+		internal System.Windows.Forms.Label horizontalLabel;
+        private CheckBox DisplayLabel;
+        private ColorComboWithTransparency textColor;
+        private Label label12;
+        private Label label11;
+        private ColorComboWithTransparency backgroundColor;
+		private bool m_inUpdate = false;
+
+		public event EventHandler Changed;
+
+        private IEditorService m_editor;
+        private FeatureSourceDescription.FeatureSourceSchema m_schema;
+        private string m_featureSource;
+        private string m_providername;
+
+        public FontStyleEditor(IEditorService editor, FeatureSourceDescription.FeatureSourceSchema schema, string featureSource)
+            : this()
+        {
+            m_editor = editor;
+            m_schema = schema;
+
+            var fs = (FeatureSourceType)editor.ResourceService.GetResource(featureSource);
+
+            m_providername = fs.Provider;
+            m_featureSource = featureSource;
+
+            propertyCombo.Items.Clear();
+            foreach (FeatureSetColumn col in m_schema.Columns)
+                if (col.Type != Utility.GeometryType && col.Type != Utility.RasterType)
+                propertyCombo.Items.Add(col.Name);
+            propertyCombo.Items.Add(Properties.Resources.ExpressionItem);
+
+            fontCombo.Items.Clear();
+            foreach (FontFamily f in new System.Drawing.Text.InstalledFontCollection().Families)
+                fontCombo.Items.Add(f.Name);
+
+        }
+
+        private FontStyleEditor()
+		{
+			//
+			// Required for Windows Form Designer support
+			//
+			InitializeComponent();
+
+            using(System.IO.StringReader sr = new System.IO.StringReader(Properties.Resources.GeometryStyleComboDataset))
+				ComboBoxDataSet.ReadXml(sr);
+        }
+
+
+		private void UpdateDisplay()
+		{
+			if (m_inUpdate)
+				return;
+			try
+			{
+				m_inUpdate = true;
+
+                if (m_item == null)
+                {
+                    DisplayLabel.Checked = false;
+                    return;
+                }
+                else
+                    DisplayLabel.Checked = true;
+
+				propertyCombo.Text = m_item.Text;
+				propertyCombo.SelectedItem = m_item.Text;
+				if (m_item.FontName != null)
+					fontCombo.Text = m_item.FontName;
+				sizeContextCombo.SelectedValue = m_item.SizeContext.ToString();
+				unitsCombo.SelectedValue = m_item.Unit.ToString();
+				if (m_item.SizeX == null)
+					sizeCombo.Text = "";
+				else
+					sizeCombo.Text = m_item.SizeX.ToString();
+
+				boldCheck.Checked = m_item.Bold == "true";
+				italicCheck.Checked = m_item.Italic == "true";
+				underlineCheck.Checked = m_item.Underlined == "true";
+                textColor.CurrentColor = Utility.ParseHTMLColor(m_item.ForegroundColor);
+                backgroundColor.CurrentColor = Utility.ParseHTMLColor(m_item.BackgroundColor);
+				backgroundTypeCombo.SelectedValue = m_item.BackgroundStyle.ToString();
+                rotationCombo.SelectedIndex = -1;
+                rotationCombo.Text = m_item.Rotation;
+                if (m_item.HorizontalAlignment != null)
+                {
+                    horizontalCombo.SelectedValue = m_item.HorizontalAlignment;
+                    if (horizontalCombo.SelectedValue == null)
+                    {
+                        horizontalCombo.SelectedIndex = -1;
+                        horizontalCombo.Text = m_item.HorizontalAlignment;
+                    }
+                }
+
+                if (m_item.VerticalAlignment != null)
+                {
+                    verticalCombo.SelectedValue = m_item.VerticalAlignment;
+                    if (verticalCombo.SelectedValue == null)
+                    {
+                        verticalCombo.SelectedIndex = -1;
+                        verticalCombo.Text = m_item.VerticalAlignment;
+                    }
+                }
+			}
+			finally
+			{
+				m_inUpdate = false;
+			}
+		}
+
+
+		/// <summary>
+		/// Clean up any resources being used.
+		/// </summary>
+		protected override void Dispose( bool disposing )
+		{
+			if( disposing )
+			{
+				if(components != null)
+				{
+					components.Dispose();
+				}
+			}
+			base.Dispose( disposing );
+		}
+
+		#region Windows Form Designer generated code
+		/// <summary>
+		/// Required method for Designer support - do not modify
+		/// the contents of this method with the code editor.
+		/// </summary>
+		private void InitializeComponent()
+		{
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FontStyleEditor));
+            this.fontGroup = new System.Windows.Forms.GroupBox();
+            this.sizeCombo = new System.Windows.Forms.ComboBox();
+            this.unitsCombo = new System.Windows.Forms.ComboBox();
+            this.UnitsTable = new System.Data.DataTable();
+            this.dataColumn5 = new System.Data.DataColumn();
+            this.dataColumn6 = new System.Data.DataColumn();
+            this.sizeContextCombo = new System.Windows.Forms.ComboBox();
+            this.SizeContextTable = new System.Data.DataTable();
+            this.dataColumn3 = new System.Data.DataColumn();
+            this.dataColumn4 = new System.Data.DataColumn();
+            this.fontCombo = new System.Windows.Forms.ComboBox();
+            this.propertyCombo = new System.Windows.Forms.ComboBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label1 = new System.Windows.Forms.Label();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.underlineCheck = new System.Windows.Forms.CheckBox();
+            this.italicCheck = new System.Windows.Forms.CheckBox();
+            this.boldCheck = new System.Windows.Forms.CheckBox();
+            this.FontTable = new System.Data.DataTable();
+            this.dataColumn1 = new System.Data.DataColumn();
+            this.dataColumn2 = new System.Data.DataColumn();
+            this.colorGroup = new System.Windows.Forms.GroupBox();
+            this.label12 = new System.Windows.Forms.Label();
+            this.label11 = new System.Windows.Forms.Label();
+            this.backgroundColor = new ColorComboWithTransparency();
+            this.textColor = new ColorComboWithTransparency();
+            this.backgroundTypeCombo = new System.Windows.Forms.ComboBox();
+            this.BackgroundTypeTable = new System.Data.DataTable();
+            this.dataColumn9 = new System.Data.DataColumn();
+            this.dataColumn10 = new System.Data.DataColumn();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.label9 = new System.Windows.Forms.Label();
+            this.alignmentGroup = new System.Windows.Forms.GroupBox();
+            this.rotationCombo = new System.Windows.Forms.ComboBox();
+            this.RotationTable = new System.Data.DataTable();
+            this.dataColumn7 = new System.Data.DataColumn();
+            this.dataColumn8 = new System.Data.DataColumn();
+            this.verticalCombo = new System.Windows.Forms.ComboBox();
+            this.VerticalTable = new System.Data.DataTable();
+            this.dataColumn13 = new System.Data.DataColumn();
+            this.dataColumn14 = new System.Data.DataColumn();
+            this.horizontalCombo = new System.Windows.Forms.ComboBox();
+            this.HorizontalTable = new System.Data.DataTable();
+            this.dataColumn11 = new System.Data.DataColumn();
+            this.dataColumn12 = new System.Data.DataColumn();
+            this.label10 = new System.Windows.Forms.Label();
+            this.verticalLabel = new System.Windows.Forms.Label();
+            this.horizontalLabel = new System.Windows.Forms.Label();
+            this.previewGroup = new System.Windows.Forms.GroupBox();
+            this.previewPicture = new System.Windows.Forms.PictureBox();
+            this.ComboBoxDataSet = new System.Data.DataSet();
+            this.DisplayLabel = new System.Windows.Forms.CheckBox();
+            this.fontGroup.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.UnitsTable)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.SizeContextTable)).BeginInit();
+            this.panel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.FontTable)).BeginInit();
+            this.colorGroup.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.BackgroundTypeTable)).BeginInit();
+            this.alignmentGroup.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.RotationTable)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.VerticalTable)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.HorizontalTable)).BeginInit();
+            this.previewGroup.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.previewPicture)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboBoxDataSet)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // fontGroup
+            // 
+            resources.ApplyResources(this.fontGroup, "fontGroup");
+            this.fontGroup.Controls.Add(this.sizeCombo);
+            this.fontGroup.Controls.Add(this.unitsCombo);
+            this.fontGroup.Controls.Add(this.sizeContextCombo);
+            this.fontGroup.Controls.Add(this.fontCombo);
+            this.fontGroup.Controls.Add(this.propertyCombo);
+            this.fontGroup.Controls.Add(this.label6);
+            this.fontGroup.Controls.Add(this.label5);
+            this.fontGroup.Controls.Add(this.label4);
+            this.fontGroup.Controls.Add(this.label3);
+            this.fontGroup.Controls.Add(this.label2);
+            this.fontGroup.Controls.Add(this.label1);
+            this.fontGroup.Controls.Add(this.panel1);
+            this.fontGroup.Name = "fontGroup";
+            this.fontGroup.TabStop = false;
+            this.fontGroup.Enter += new System.EventHandler(this.fontGroup_Enter);
+            // 
+            // sizeCombo
+            // 
+            resources.ApplyResources(this.sizeCombo, "sizeCombo");
+            this.sizeCombo.Items.AddRange(new object[] {
+            resources.GetString("sizeCombo.Items")});
+            this.sizeCombo.Name = "sizeCombo";
+            this.sizeCombo.SelectedIndexChanged += new System.EventHandler(this.sizeCombo_SelectedIndexChanged);
+            this.sizeCombo.TextChanged += new System.EventHandler(this.sizeCombo_TextChanged);
+            // 
+            // unitsCombo
+            // 
+            resources.ApplyResources(this.unitsCombo, "unitsCombo");
+            this.unitsCombo.DataSource = this.UnitsTable;
+            this.unitsCombo.DisplayMember = "Display";
+            this.unitsCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.unitsCombo.Name = "unitsCombo";
+            this.unitsCombo.ValueMember = "Value";
+            this.unitsCombo.SelectedIndexChanged += new System.EventHandler(this.unitsCombo_SelectedIndexChanged);
+            // 
+            // UnitsTable
+            // 
+            this.UnitsTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn5,
+            this.dataColumn6});
+            this.UnitsTable.TableName = "Units";
+            // 
+            // dataColumn5
+            // 
+            this.dataColumn5.Caption = "Display";
+            this.dataColumn5.ColumnName = "Display";
+            // 
+            // dataColumn6
+            // 
+            this.dataColumn6.Caption = "Value";
+            this.dataColumn6.ColumnName = "Value";
+            // 
+            // sizeContextCombo
+            // 
+            resources.ApplyResources(this.sizeContextCombo, "sizeContextCombo");
+            this.sizeContextCombo.DataSource = this.SizeContextTable;
+            this.sizeContextCombo.DisplayMember = "Display";
+            this.sizeContextCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.sizeContextCombo.Name = "sizeContextCombo";
+            this.sizeContextCombo.ValueMember = "Value";
+            this.sizeContextCombo.SelectedIndexChanged += new System.EventHandler(this.sizeContextCombo_SelectedIndexChanged);
+            // 
+            // SizeContextTable
+            // 
+            this.SizeContextTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn3,
+            this.dataColumn4});
+            this.SizeContextTable.TableName = "SizeContext";
+            // 
+            // dataColumn3
+            // 
+            this.dataColumn3.Caption = "Display";
+            this.dataColumn3.ColumnName = "Display";
+            // 
+            // dataColumn4
+            // 
+            this.dataColumn4.Caption = "Value";
+            this.dataColumn4.ColumnName = "Value";
+            // 
+            // fontCombo
+            // 
+            resources.ApplyResources(this.fontCombo, "fontCombo");
+            this.fontCombo.Name = "fontCombo";
+            this.fontCombo.SelectedIndexChanged += new System.EventHandler(this.fontCombo_SelectedIndexChanged);
+            this.fontCombo.TextChanged += new System.EventHandler(this.fontCombo_TextChanged);
+            // 
+            // propertyCombo
+            // 
+            resources.ApplyResources(this.propertyCombo, "propertyCombo");
+            this.propertyCombo.Name = "propertyCombo";
+            this.propertyCombo.SelectedIndexChanged += new System.EventHandler(this.propertyCombo_SelectedIndexChanged);
+            this.propertyCombo.TextChanged += new System.EventHandler(this.propertyCombo_TextChanged);
+            // 
+            // label6
+            // 
+            resources.ApplyResources(this.label6, "label6");
+            this.label6.Name = "label6";
+            // 
+            // label5
+            // 
+            resources.ApplyResources(this.label5, "label5");
+            this.label5.Name = "label5";
+            // 
+            // label4
+            // 
+            resources.ApplyResources(this.label4, "label4");
+            this.label4.Name = "label4";
+            // 
+            // label3
+            // 
+            resources.ApplyResources(this.label3, "label3");
+            this.label3.Name = "label3";
+            // 
+            // label2
+            // 
+            resources.ApplyResources(this.label2, "label2");
+            this.label2.Name = "label2";
+            // 
+            // label1
+            // 
+            resources.ApplyResources(this.label1, "label1");
+            this.label1.Name = "label1";
+            // 
+            // panel1
+            // 
+            resources.ApplyResources(this.panel1, "panel1");
+            this.panel1.Controls.Add(this.underlineCheck);
+            this.panel1.Controls.Add(this.italicCheck);
+            this.panel1.Controls.Add(this.boldCheck);
+            this.panel1.Name = "panel1";
+            // 
+            // underlineCheck
+            // 
+            resources.ApplyResources(this.underlineCheck, "underlineCheck");
+            this.underlineCheck.Name = "underlineCheck";
+            this.underlineCheck.CheckedChanged += new System.EventHandler(this.underlineCheck_CheckedChanged);
+            // 
+            // italicCheck
+            // 
+            resources.ApplyResources(this.italicCheck, "italicCheck");
+            this.italicCheck.Name = "italicCheck";
+            this.italicCheck.CheckedChanged += new System.EventHandler(this.italicCheck_CheckedChanged);
+            // 
+            // boldCheck
+            // 
+            resources.ApplyResources(this.boldCheck, "boldCheck");
+            this.boldCheck.Name = "boldCheck";
+            this.boldCheck.CheckedChanged += new System.EventHandler(this.boldCheck_CheckedChanged);
+            // 
+            // FontTable
+            // 
+            this.FontTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn1,
+            this.dataColumn2});
+            this.FontTable.TableName = "Font";
+            // 
+            // dataColumn1
+            // 
+            this.dataColumn1.Caption = "Display";
+            this.dataColumn1.ColumnName = "Display";
+            // 
+            // dataColumn2
+            // 
+            this.dataColumn2.Caption = "Value";
+            this.dataColumn2.ColumnName = "Value";
+            // 
+            // colorGroup
+            // 
+            resources.ApplyResources(this.colorGroup, "colorGroup");
+            this.colorGroup.Controls.Add(this.label12);
+            this.colorGroup.Controls.Add(this.label11);
+            this.colorGroup.Controls.Add(this.backgroundColor);
+            this.colorGroup.Controls.Add(this.textColor);
+            this.colorGroup.Controls.Add(this.backgroundTypeCombo);
+            this.colorGroup.Controls.Add(this.label7);
+            this.colorGroup.Controls.Add(this.label8);
+            this.colorGroup.Controls.Add(this.label9);
+            this.colorGroup.Name = "colorGroup";
+            this.colorGroup.TabStop = false;
+            // 
+            // label12
+            // 
+            resources.ApplyResources(this.label12, "label12");
+            this.label12.Name = "label12";
+            // 
+            // label11
+            // 
+            resources.ApplyResources(this.label11, "label11");
+            this.label11.Name = "label11";
+            // 
+            // backgroundColor
+            // 
+            resources.ApplyResources(this.backgroundColor, "backgroundColor");
+            this.backgroundColor.CurrentColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
+            this.backgroundColor.Name = "backgroundColor";
+            this.backgroundColor.CurrentColorChanged += new System.EventHandler(this.backgroundColor_SelectedIndexChanged);
+            // 
+            // textColor
+            // 
+            resources.ApplyResources(this.textColor, "textColor");
+            this.textColor.CurrentColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
+            this.textColor.Name = "textColor";
+            this.textColor.CurrentColorChanged += new System.EventHandler(this.textColor_SelectedIndexChanged);
+            // 
+            // backgroundTypeCombo
+            // 
+            resources.ApplyResources(this.backgroundTypeCombo, "backgroundTypeCombo");
+            this.backgroundTypeCombo.DataSource = this.BackgroundTypeTable;
+            this.backgroundTypeCombo.DisplayMember = "Display";
+            this.backgroundTypeCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.backgroundTypeCombo.Name = "backgroundTypeCombo";
+            this.backgroundTypeCombo.ValueMember = "Value";
+            this.backgroundTypeCombo.SelectedIndexChanged += new System.EventHandler(this.backgroundTypeCombo_SelectedIndexChanged);
+            // 
+            // BackgroundTypeTable
+            // 
+            this.BackgroundTypeTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn9,
+            this.dataColumn10});
+            this.BackgroundTypeTable.TableName = "BackgroundType";
+            // 
+            // dataColumn9
+            // 
+            this.dataColumn9.ColumnName = "Display";
+            // 
+            // dataColumn10
+            // 
+            this.dataColumn10.ColumnName = "Value";
+            // 
+            // label7
+            // 
+            resources.ApplyResources(this.label7, "label7");
+            this.label7.Name = "label7";
+            // 
+            // label8
+            // 
+            resources.ApplyResources(this.label8, "label8");
+            this.label8.Name = "label8";
+            // 
+            // label9
+            // 
+            resources.ApplyResources(this.label9, "label9");
+            this.label9.Name = "label9";
+            // 
+            // alignmentGroup
+            // 
+            resources.ApplyResources(this.alignmentGroup, "alignmentGroup");
+            this.alignmentGroup.Controls.Add(this.rotationCombo);
+            this.alignmentGroup.Controls.Add(this.verticalCombo);
+            this.alignmentGroup.Controls.Add(this.horizontalCombo);
+            this.alignmentGroup.Controls.Add(this.label10);
+            this.alignmentGroup.Controls.Add(this.verticalLabel);
+            this.alignmentGroup.Controls.Add(this.horizontalLabel);
+            this.alignmentGroup.Name = "alignmentGroup";
+            this.alignmentGroup.TabStop = false;
+            // 
+            // rotationCombo
+            // 
+            resources.ApplyResources(this.rotationCombo, "rotationCombo");
+            this.rotationCombo.DataSource = this.RotationTable;
+            this.rotationCombo.DisplayMember = "Display";
+            this.rotationCombo.Name = "rotationCombo";
+            this.rotationCombo.ValueMember = "Value";
+            this.rotationCombo.SelectedIndexChanged += new System.EventHandler(this.rotationCombo_SelectedIndexChanged);
+            this.rotationCombo.TextChanged += new System.EventHandler(this.rotationCombo_TextChanged);
+            // 
+            // RotationTable
+            // 
+            this.RotationTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn7,
+            this.dataColumn8});
+            this.RotationTable.TableName = "Rotation";
+            // 
+            // dataColumn7
+            // 
+            this.dataColumn7.Caption = "Display";
+            this.dataColumn7.ColumnName = "Display";
+            // 
+            // dataColumn8
+            // 
+            this.dataColumn8.Caption = "Value";
+            this.dataColumn8.ColumnName = "Value";
+            // 
+            // verticalCombo
+            // 
+            resources.ApplyResources(this.verticalCombo, "verticalCombo");
+            this.verticalCombo.DataSource = this.VerticalTable;
+            this.verticalCombo.DisplayMember = "Display";
+            this.verticalCombo.Name = "verticalCombo";
+            this.verticalCombo.ValueMember = "Value";
+            this.verticalCombo.SelectedIndexChanged += new System.EventHandler(this.verticalCombo_SelectedIndexChanged);
+            this.verticalCombo.TextChanged += new System.EventHandler(this.verticalCombo_TextChanged);
+            // 
+            // VerticalTable
+            // 
+            this.VerticalTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn13,
+            this.dataColumn14});
+            this.VerticalTable.TableName = "Vertical";
+            // 
+            // dataColumn13
+            // 
+            this.dataColumn13.ColumnName = "Display";
+            // 
+            // dataColumn14
+            // 
+            this.dataColumn14.ColumnName = "Value";
+            // 
+            // horizontalCombo
+            // 
+            resources.ApplyResources(this.horizontalCombo, "horizontalCombo");
+            this.horizontalCombo.DataSource = this.HorizontalTable;
+            this.horizontalCombo.DisplayMember = "Display";
+            this.horizontalCombo.Name = "horizontalCombo";
+            this.horizontalCombo.ValueMember = "Value";
+            this.horizontalCombo.SelectedIndexChanged += new System.EventHandler(this.horizontalCombo_SelectedIndexChanged);
+            this.horizontalCombo.TextChanged += new System.EventHandler(this.horizontalCombo_TextChanged);
+            // 
+            // HorizontalTable
+            // 
+            this.HorizontalTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn11,
+            this.dataColumn12});
+            this.HorizontalTable.TableName = "Horizontal";
+            // 
+            // dataColumn11
+            // 
+            this.dataColumn11.ColumnName = "Display";
+            // 
+            // dataColumn12
+            // 
+            this.dataColumn12.ColumnName = "Value";
+            // 
+            // label10
+            // 
+            resources.ApplyResources(this.label10, "label10");
+            this.label10.Name = "label10";
+            // 
+            // verticalLabel
+            // 
+            resources.ApplyResources(this.verticalLabel, "verticalLabel");
+            this.verticalLabel.Name = "verticalLabel";
+            // 
+            // horizontalLabel
+            // 
+            resources.ApplyResources(this.horizontalLabel, "horizontalLabel");
+            this.horizontalLabel.Name = "horizontalLabel";
+            // 
+            // previewGroup
+            // 
+            resources.ApplyResources(this.previewGroup, "previewGroup");
+            this.previewGroup.Controls.Add(this.previewPicture);
+            this.previewGroup.Name = "previewGroup";
+            this.previewGroup.TabStop = false;
+            // 
+            // previewPicture
+            // 
+            resources.ApplyResources(this.previewPicture, "previewPicture");
+            this.previewPicture.BackColor = System.Drawing.Color.White;
+            this.previewPicture.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.previewPicture.Name = "previewPicture";
+            this.previewPicture.TabStop = false;
+            this.previewPicture.Paint += new System.Windows.Forms.PaintEventHandler(this.previewPicture_Paint);
+            // 
+            // ComboBoxDataSet
+            // 
+            this.ComboBoxDataSet.DataSetName = "ComboBoxDataSet";
+            this.ComboBoxDataSet.Locale = new System.Globalization.CultureInfo("da-DK");
+            this.ComboBoxDataSet.Tables.AddRange(new System.Data.DataTable[] {
+            this.FontTable,
+            this.SizeContextTable,
+            this.UnitsTable,
+            this.RotationTable,
+            this.BackgroundTypeTable,
+            this.HorizontalTable,
+            this.VerticalTable});
+            // 
+            // DisplayLabel
+            // 
+            resources.ApplyResources(this.DisplayLabel, "DisplayLabel");
+            this.DisplayLabel.Checked = true;
+            this.DisplayLabel.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.DisplayLabel.Name = "DisplayLabel";
+            this.DisplayLabel.UseVisualStyleBackColor = true;
+            this.DisplayLabel.CheckedChanged += new System.EventHandler(this.DisplayLabel_CheckedChanged);
+            // 
+            // FontStyleEditor
+            // 
+            resources.ApplyResources(this, "$this");
+            this.Controls.Add(this.DisplayLabel);
+            this.Controls.Add(this.previewGroup);
+            this.Controls.Add(this.colorGroup);
+            this.Controls.Add(this.fontGroup);
+            this.Controls.Add(this.alignmentGroup);
+            this.Name = "FontStyleEditor";
+            this.fontGroup.ResumeLayout(false);
+            this.fontGroup.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.UnitsTable)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.SizeContextTable)).EndInit();
+            this.panel1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.FontTable)).EndInit();
+            this.colorGroup.ResumeLayout(false);
+            this.colorGroup.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.BackgroundTypeTable)).EndInit();
+            this.alignmentGroup.ResumeLayout(false);
+            this.alignmentGroup.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.RotationTable)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.VerticalTable)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.HorizontalTable)).EndInit();
+            this.previewGroup.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.previewPicture)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboBoxDataSet)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+		}
+		#endregion
+
+
+		private void propertyCombo_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+            if (propertyCombo.SelectedIndex == propertyCombo.Items.Count - 1)
+            {
+                string current = m_item.Text;
+                string expr = m_editor.EditExpression(current, m_schema, m_providername, m_featureSource);
+                if (!string.IsNullOrEmpty(expr))
+                    current = expr;
+
+                //This is required as we cannot update the text from within the SelectedIndexChanged event :(
+                BeginInvoke(new UpdateComboTextFromSelectChangedDelegate(UpdateComboTextFromSelectChanged), propertyCombo, current, expr != null);
+            }
+		}
+
+		private void fontCombo_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+			m_item.FontName = (string)fontCombo.Text;
+			previewPicture.Refresh();
+
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void sizeContextCombo_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+			m_item.SizeContext = (SizeContextType)Enum.Parse(typeof(SizeContextType), (string)sizeContextCombo.SelectedValue);
+			previewPicture.Refresh();
+
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void unitsCombo_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+			m_item.Unit = (LengthUnitType)Enum.Parse(typeof(LengthUnitType), (string)unitsCombo.SelectedValue);
+			previewPicture.Refresh();
+
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void sizeCombo_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+            if (sizeCombo.SelectedIndex == sizeCombo.Items.Count - 1)
+            {
+                string current = m_item.SizeX;
+                string expr = m_editor.EditExpression(current, m_schema, m_providername, m_featureSource);
+                if (!string.IsNullOrEmpty(expr))
+                    current = expr;
+
+                //This is required as we cannot update the text from within the SelectedIndexChanged event :(
+                BeginInvoke(new UpdateComboTextFromSelectChangedDelegate(UpdateComboTextFromSelectChanged), sizeCombo, current, expr != null);
+            }
+        }
+
+		private void boldCheck_CheckedChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+			m_item.Bold = boldCheck.Checked ? "true" : null;
+			previewPicture.Refresh();
+
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void italicCheck_CheckedChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+			m_item.Italic = italicCheck.Checked ? "true" : null;
+			previewPicture.Refresh();
+
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void underlineCheck_CheckedChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+			m_item.Underlined = underlineCheck.Checked ? "true" : null;
+			previewPicture.Refresh();
+
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void textColor_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+            m_item.ForegroundColor = Utility.SerializeHTMLColor(textColor.CurrentColor, true);
+			previewPicture.Refresh();
+
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void backgroundColor_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+            m_item.BackgroundColor = Utility.SerializeHTMLColor(backgroundColor.CurrentColor, true);
+			previewPicture.Refresh();
+
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void backgroundTypeCombo_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+			m_item.BackgroundStyle = (BackgroundStyleType)Enum.Parse(typeof(BackgroundStyleType), (string)backgroundTypeCombo.SelectedValue);
+			previewPicture.Refresh();
+
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void horizontalCombo_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+            if (m_inUpdate)
+                return;
+
+            if (horizontalCombo.SelectedIndex == horizontalCombo.Items.Count - 1)
+            {
+                string current = m_item.HorizontalAlignment;
+                string expr = m_editor.EditExpression(current, m_schema, m_providername, m_featureSource);
+                if (!string.IsNullOrEmpty(expr))
+                    current = expr;
+
+                //This is required as we cannot update the text from within the SelectedIndexChanged event :(
+                BeginInvoke(new UpdateComboTextFromSelectChangedDelegate(UpdateComboTextFromSelectChanged), horizontalCombo, current, expr != null);
+            }
+            else if (horizontalCombo.SelectedIndex != -1)
+            {
+                m_item.HorizontalAlignment = (string)horizontalCombo.SelectedValue;
+            }
+        }
+
+		private void verticalCombo_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+            if (verticalCombo.SelectedIndex == verticalCombo.Items.Count - 1)
+            {
+                string current = m_item.VerticalAlignment;
+                string expr = m_editor.EditExpression(current, m_schema, m_providername, m_featureSource);
+                if (!string.IsNullOrEmpty(expr))
+                    current = expr;
+
+                //This is required as we cannot update the text from within the SelectedIndexChanged event :(
+                BeginInvoke(new UpdateComboTextFromSelectChangedDelegate(UpdateComboTextFromSelectChanged), verticalCombo, current, expr != null);
+            }
+            else if (verticalCombo.SelectedIndex != -1)
+            {
+                m_item.VerticalAlignment = (string)verticalCombo.SelectedValue;
+            }
+        }
+
+		private void rotationCombo_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+            if (rotationCombo.SelectedIndex == rotationCombo.Items.Count - 1)
+            {
+                string current = m_item.Rotation;
+                string expr = m_editor.EditExpression(current, m_schema, m_providername, m_featureSource);
+                if (!string.IsNullOrEmpty(expr))
+                    current = expr;
+
+                //This is required as we cannot update the text from within the SelectedIndexChanged event :(
+                BeginInvoke(new UpdateComboTextFromSelectChangedDelegate(UpdateComboTextFromSelectChanged), rotationCombo, current, expr != null);
+            }
+            else if (rotationCombo.SelectedIndex != -1)
+            {
+                m_item.Rotation = (string)rotationCombo.SelectedValue;
+            }
+        }
+
+		private void previewPicture_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
+		{
+			FeaturePreviewRender.RenderPreviewFont(e.Graphics, new Rectangle(1, 1, previewPicture.Width - 2, previewPicture.Height - 2), m_item);
+		}
+
+		private void fontGroup_Enter(object sender, System.EventArgs e)
+		{
+		
+		}
+
+		private void propertyCombo_TextChanged(object sender, System.EventArgs e)
+		{
+            if (m_inUpdate || propertyCombo.SelectedIndex == propertyCombo.Items.Count - 1)
+                return;
+
+            m_item.Text = propertyCombo.Text;
+            previewPicture.Refresh();
+
+            if (Changed != null)
+                Changed(this, new EventArgs());
+        }
+
+		public TextSymbolType Item
+		{
+			get { return m_item; }
+			set 
+			{
+				m_item = value;
+				UpdateDisplay();
+			}
+		}
+
+        private void DisplayLabel_CheckedChanged(object sender, EventArgs e)
+        {
+            foreach (Control c in this.Controls)
+                c.Enabled = c == DisplayLabel || DisplayLabel.Checked;
+
+            if (m_inUpdate)
+                return;
+
+            if (DisplayLabel.Checked)
+            {
+                if (DisplayLabel.Tag as TextSymbolType != null)
+                    this.Item = DisplayLabel.Tag as TextSymbolType;
+                if (m_item == null)
+                    this.Item = ObjectFactory.CreateDefaultTextSymbol();
+            }
+            else
+            {
+                DisplayLabel.Tag = m_item;
+                this.Item = null;
+            }
+
+        }
+
+        private void sizeCombo_TextChanged(object sender, EventArgs e)
+        {
+            if (m_inUpdate || sizeCombo.SelectedIndex != -1)
+                return;
+
+            //TODO: Validate
+            m_item.SizeX = m_item.SizeY = sizeCombo.Text;
+            previewPicture.Refresh();
+
+            if (Changed != null)
+                Changed(this, new EventArgs());
+        }
+
+        private void fontCombo_TextChanged(object sender, EventArgs e)
+        {
+            fontCombo_SelectedIndexChanged(sender, e);
+        }
+
+
+        public delegate void UpdateComboTextFromSelectChangedDelegate(ComboBox owner, string text, bool userChange);
+
+        private void UpdateComboTextFromSelectChanged(ComboBox owner, string text, bool userChange)
+        {
+            try
+            {
+                if (!userChange)
+                    m_inUpdate = true;
+                owner.SelectedIndex = -1;
+
+                //HACK: Odd bug, don't remove
+                if (owner.SelectedIndex != -1)
+                    owner.SelectedIndex = -1;
+
+                owner.Text = text;
+            }
+            finally
+            {
+                if (!userChange)
+                    m_inUpdate = false;
+            }
+        }
+
+        private void horizontalCombo_TextChanged(object sender, EventArgs e)
+        {
+            if (m_inUpdate || horizontalCombo.SelectedIndex != -1)
+                return;
+
+            m_item.HorizontalAlignment = (string)horizontalCombo.Text;
+            previewPicture.Refresh();
+
+            if (Changed != null)
+                Changed(this, new EventArgs());
+        }
+
+        private void verticalCombo_TextChanged(object sender, EventArgs e)
+        {
+            if (m_inUpdate || verticalCombo.SelectedIndex != -1)
+                return;
+
+            m_item.VerticalAlignment = (string)verticalCombo.Text;
+            previewPicture.Refresh();
+
+            if (Changed != null)
+                Changed(this, new EventArgs());
+        }
+
+        private void rotationCombo_TextChanged(object sender, EventArgs e)
+        {
+            if (m_inUpdate || rotationCombo.SelectedIndex != -1)
+                return;
+
+            //TODO: Validate
+            m_item.Rotation = rotationCombo.Text;
+            previewPicture.Refresh();
+
+            if (Changed != null)
+                Changed(this, new EventArgs());
+        }
+
+	}
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FontStyleEditor.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FontStyleEditor.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/FontStyleEditor.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,1218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="fontGroup.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="sizeCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="sizeCombo.Items" xml:space="preserve">
+    <value>Expression...</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="sizeCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 144</value>
+  </data>
+  <data name="sizeCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>176, 21</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="sizeCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="&gt;&gt;sizeCombo.Name" xml:space="preserve">
+    <value>sizeCombo</value>
+  </data>
+  <data name="&gt;&gt;sizeCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;sizeCombo.Parent" xml:space="preserve">
+    <value>fontGroup</value>
+  </data>
+  <data name="&gt;&gt;sizeCombo.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="unitsCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="unitsCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 112</value>
+  </data>
+  <data name="unitsCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>176, 21</value>
+  </data>
+  <data name="unitsCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="&gt;&gt;unitsCombo.Name" xml:space="preserve">
+    <value>unitsCombo</value>
+  </data>
+  <data name="&gt;&gt;unitsCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;unitsCombo.Parent" xml:space="preserve">
+    <value>fontGroup</value>
+  </data>
+  <data name="&gt;&gt;unitsCombo.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="sizeContextCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="sizeContextCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 80</value>
+  </data>
+  <data name="sizeContextCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>176, 21</value>
+  </data>
+  <data name="sizeContextCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="&gt;&gt;sizeContextCombo.Name" xml:space="preserve">
+    <value>sizeContextCombo</value>
+  </data>
+  <data name="&gt;&gt;sizeContextCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;sizeContextCombo.Parent" xml:space="preserve">
+    <value>fontGroup</value>
+  </data>
+  <data name="&gt;&gt;sizeContextCombo.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="fontCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="fontCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 48</value>
+  </data>
+  <data name="fontCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>176, 21</value>
+  </data>
+  <data name="fontCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="&gt;&gt;fontCombo.Name" xml:space="preserve">
+    <value>fontCombo</value>
+  </data>
+  <data name="&gt;&gt;fontCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;fontCombo.Parent" xml:space="preserve">
+    <value>fontGroup</value>
+  </data>
+  <data name="&gt;&gt;fontCombo.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="propertyCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="propertyCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 16</value>
+  </data>
+  <data name="propertyCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>176, 21</value>
+  </data>
+  <data name="propertyCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="&gt;&gt;propertyCombo.Name" xml:space="preserve">
+    <value>propertyCombo</value>
+  </data>
+  <data name="&gt;&gt;propertyCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;propertyCombo.Parent" xml:space="preserve">
+    <value>fontGroup</value>
+  </data>
+  <data name="&gt;&gt;propertyCombo.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="label6.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label6.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 176</value>
+  </data>
+  <data name="label6.Size" type="System.Drawing.Size, System.Drawing">
+    <value>30, 13</value>
+  </data>
+  <data name="label6.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name="label6.Text" xml:space="preserve">
+    <value>Style</value>
+  </data>
+  <data name="&gt;&gt;label6.Name" xml:space="preserve">
+    <value>label6</value>
+  </data>
+  <data name="&gt;&gt;label6.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label6.Parent" xml:space="preserve">
+    <value>fontGroup</value>
+  </data>
+  <data name="&gt;&gt;label6.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="label5.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label5.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 144</value>
+  </data>
+  <data name="label5.Size" type="System.Drawing.Size, System.Drawing">
+    <value>27, 13</value>
+  </data>
+  <data name="label5.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="label5.Text" xml:space="preserve">
+    <value>Size</value>
+  </data>
+  <data name="&gt;&gt;label5.Name" xml:space="preserve">
+    <value>label5</value>
+  </data>
+  <data name="&gt;&gt;label5.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label5.Parent" xml:space="preserve">
+    <value>fontGroup</value>
+  </data>
+  <data name="&gt;&gt;label5.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="label4.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label4.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 112</value>
+  </data>
+  <data name="label4.Size" type="System.Drawing.Size, System.Drawing">
+    <value>31, 13</value>
+  </data>
+  <data name="label4.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="label4.Text" xml:space="preserve">
+    <value>Units</value>
+  </data>
+  <data name="&gt;&gt;label4.Name" xml:space="preserve">
+    <value>label4</value>
+  </data>
+  <data name="&gt;&gt;label4.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label4.Parent" xml:space="preserve">
+    <value>fontGroup</value>
+  </data>
+  <data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="label3.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 80</value>
+  </data>
+  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>65, 13</value>
+  </data>
+  <data name="label3.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="label3.Text" xml:space="preserve">
+    <value>Size context</value>
+  </data>
+  <data name="&gt;&gt;label3.Name" xml:space="preserve">
+    <value>label3</value>
+  </data>
+  <data name="&gt;&gt;label3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label3.Parent" xml:space="preserve">
+    <value>fontGroup</value>
+  </data>
+  <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
+    <value>8</value>
+  </data>
+  <data name="label2.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 48</value>
+  </data>
+  <data name="label2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>28, 13</value>
+  </data>
+  <data name="label2.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="label2.Text" xml:space="preserve">
+    <value>Font</value>
+  </data>
+  <data name="&gt;&gt;label2.Name" xml:space="preserve">
+    <value>label2</value>
+  </data>
+  <data name="&gt;&gt;label2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label2.Parent" xml:space="preserve">
+    <value>fontGroup</value>
+  </data>
+  <data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
+    <value>9</value>
+  </data>
+  <data name="label1.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 16</value>
+  </data>
+  <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>46, 13</value>
+  </data>
+  <data name="label1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="label1.Text" xml:space="preserve">
+    <value>Property</value>
+  </data>
+  <data name="&gt;&gt;label1.Name" xml:space="preserve">
+    <value>label1</value>
+  </data>
+  <data name="&gt;&gt;label1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label1.Parent" xml:space="preserve">
+    <value>fontGroup</value>
+  </data>
+  <data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
+    <value>10</value>
+  </data>
+  <data name="panel1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="underlineCheck.Appearance" type="System.Windows.Forms.Appearance, System.Windows.Forms">
+    <value>Button</value>
+  </data>
+  <data name="underlineCheck.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
+    <value>System</value>
+  </data>
+  <data name="underlineCheck.Font" type="System.Drawing.Font, System.Drawing">
+    <value>Arial, 8.25pt, style=Underline</value>
+  </data>
+  <data name="underlineCheck.Location" type="System.Drawing.Point, System.Drawing">
+    <value>64, 0</value>
+  </data>
+  <data name="underlineCheck.Size" type="System.Drawing.Size, System.Drawing">
+    <value>24, 24</value>
+  </data>
+  <data name="underlineCheck.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name="underlineCheck.Text" xml:space="preserve">
+    <value>U</value>
+  </data>
+  <data name="underlineCheck.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
+    <value>MiddleCenter</value>
+  </data>
+  <data name="&gt;&gt;underlineCheck.Name" xml:space="preserve">
+    <value>underlineCheck</value>
+  </data>
+  <data name="&gt;&gt;underlineCheck.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;underlineCheck.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;underlineCheck.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="italicCheck.Appearance" type="System.Windows.Forms.Appearance, System.Windows.Forms">
+    <value>Button</value>
+  </data>
+  <data name="italicCheck.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
+    <value>System</value>
+  </data>
+  <data name="italicCheck.Font" type="System.Drawing.Font, System.Drawing">
+    <value>Arial, 8.25pt, style=Italic</value>
+  </data>
+  <data name="italicCheck.Location" type="System.Drawing.Point, System.Drawing">
+    <value>32, 0</value>
+  </data>
+  <data name="italicCheck.Size" type="System.Drawing.Size, System.Drawing">
+    <value>24, 24</value>
+  </data>
+  <data name="italicCheck.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="italicCheck.Text" xml:space="preserve">
+    <value>I</value>
+  </data>
+  <data name="italicCheck.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
+    <value>MiddleCenter</value>
+  </data>
+  <data name="&gt;&gt;italicCheck.Name" xml:space="preserve">
+    <value>italicCheck</value>
+  </data>
+  <data name="&gt;&gt;italicCheck.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;italicCheck.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;italicCheck.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="boldCheck.Appearance" type="System.Windows.Forms.Appearance, System.Windows.Forms">
+    <value>Button</value>
+  </data>
+  <data name="boldCheck.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
+    <value>System</value>
+  </data>
+  <data name="boldCheck.Font" type="System.Drawing.Font, System.Drawing">
+    <value>Arial, 8.25pt, style=Bold</value>
+  </data>
+  <data name="boldCheck.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="boldCheck.Size" type="System.Drawing.Size, System.Drawing">
+    <value>24, 24</value>
+  </data>
+  <data name="boldCheck.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="boldCheck.Text" xml:space="preserve">
+    <value>B</value>
+  </data>
+  <data name="boldCheck.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
+    <value>MiddleCenter</value>
+  </data>
+  <data name="&gt;&gt;boldCheck.Name" xml:space="preserve">
+    <value>boldCheck</value>
+  </data>
+  <data name="&gt;&gt;boldCheck.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;boldCheck.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;boldCheck.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 176</value>
+  </data>
+  <data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>176, 24</value>
+  </data>
+  <data name="panel1.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name="&gt;&gt;panel1.Name" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;panel1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;panel1.Parent" xml:space="preserve">
+    <value>fontGroup</value>
+  </data>
+  <data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
+    <value>11</value>
+  </data>
+  <data name="fontGroup.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 24</value>
+  </data>
+  <data name="fontGroup.Size" type="System.Drawing.Size, System.Drawing">
+    <value>296, 208</value>
+  </data>
+  <data name="fontGroup.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name="fontGroup.Text" xml:space="preserve">
+    <value>Font</value>
+  </data>
+  <data name="&gt;&gt;fontGroup.Name" xml:space="preserve">
+    <value>fontGroup</value>
+  </data>
+  <data name="&gt;&gt;fontGroup.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;fontGroup.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;fontGroup.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="colorGroup.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="label12.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label12.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label12.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 96</value>
+  </data>
+  <data name="label12.Size" type="System.Drawing.Size, System.Drawing">
+    <value>72, 13</value>
+  </data>
+  <data name="label12.TabIndex" type="System.Int32, mscorlib">
+    <value>15</value>
+  </data>
+  <data name="label12.Text" xml:space="preserve">
+    <value>Transparency</value>
+  </data>
+  <data name="&gt;&gt;label12.Name" xml:space="preserve">
+    <value>label12</value>
+  </data>
+  <data name="&gt;&gt;label12.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label12.Parent" xml:space="preserve">
+    <value>colorGroup</value>
+  </data>
+  <data name="&gt;&gt;label12.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="label11.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label11.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label11.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 40</value>
+  </data>
+  <data name="label11.Size" type="System.Drawing.Size, System.Drawing">
+    <value>72, 13</value>
+  </data>
+  <data name="label11.TabIndex" type="System.Int32, mscorlib">
+    <value>14</value>
+  </data>
+  <data name="label11.Text" xml:space="preserve">
+    <value>Transparency</value>
+  </data>
+  <data name="&gt;&gt;label11.Name" xml:space="preserve">
+    <value>label11</value>
+  </data>
+  <data name="&gt;&gt;label11.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label11.Parent" xml:space="preserve">
+    <value>colorGroup</value>
+  </data>
+  <data name="&gt;&gt;label11.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="backgroundColor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="backgroundColor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 72</value>
+  </data>
+  <data name="backgroundColor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>176, 49</value>
+  </data>
+  <data name="backgroundColor.TabIndex" type="System.Int32, mscorlib">
+    <value>13</value>
+  </data>
+  <data name="&gt;&gt;backgroundColor.Name" xml:space="preserve">
+    <value>backgroundColor</value>
+  </data>
+  <data name="&gt;&gt;backgroundColor.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.ColorComboWithTransparency, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4437, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;backgroundColor.Parent" xml:space="preserve">
+    <value>colorGroup</value>
+  </data>
+  <data name="&gt;&gt;backgroundColor.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="textColor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="textColor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 16</value>
+  </data>
+  <data name="textColor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>176, 49</value>
+  </data>
+  <data name="textColor.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name="&gt;&gt;textColor.Name" xml:space="preserve">
+    <value>textColor</value>
+  </data>
+  <data name="&gt;&gt;textColor.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.ColorComboWithTransparency, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4437, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;textColor.Parent" xml:space="preserve">
+    <value>colorGroup</value>
+  </data>
+  <data name="&gt;&gt;textColor.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="backgroundTypeCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="backgroundTypeCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 128</value>
+  </data>
+  <data name="backgroundTypeCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>176, 21</value>
+  </data>
+  <data name="backgroundTypeCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name="&gt;&gt;backgroundTypeCombo.Name" xml:space="preserve">
+    <value>backgroundTypeCombo</value>
+  </data>
+  <data name="&gt;&gt;backgroundTypeCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;backgroundTypeCombo.Parent" xml:space="preserve">
+    <value>colorGroup</value>
+  </data>
+  <data name="&gt;&gt;backgroundTypeCombo.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="label7.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label7.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 130</value>
+  </data>
+  <data name="label7.Size" type="System.Drawing.Size, System.Drawing">
+    <value>88, 13</value>
+  </data>
+  <data name="label7.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name="label7.Text" xml:space="preserve">
+    <value>Background type</value>
+  </data>
+  <data name="&gt;&gt;label7.Name" xml:space="preserve">
+    <value>label7</value>
+  </data>
+  <data name="&gt;&gt;label7.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label7.Parent" xml:space="preserve">
+    <value>colorGroup</value>
+  </data>
+  <data name="&gt;&gt;label7.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="label8.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label8.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 72</value>
+  </data>
+  <data name="label8.Size" type="System.Drawing.Size, System.Drawing">
+    <value>65, 13</value>
+  </data>
+  <data name="label8.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="label8.Text" xml:space="preserve">
+    <value>Background</value>
+  </data>
+  <data name="&gt;&gt;label8.Name" xml:space="preserve">
+    <value>label8</value>
+  </data>
+  <data name="&gt;&gt;label8.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label8.Parent" xml:space="preserve">
+    <value>colorGroup</value>
+  </data>
+  <data name="&gt;&gt;label8.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="label9.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label9.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 16</value>
+  </data>
+  <data name="label9.Size" type="System.Drawing.Size, System.Drawing">
+    <value>28, 13</value>
+  </data>
+  <data name="label9.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="label9.Text" xml:space="preserve">
+    <value>Text</value>
+  </data>
+  <data name="&gt;&gt;label9.Name" xml:space="preserve">
+    <value>label9</value>
+  </data>
+  <data name="&gt;&gt;label9.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label9.Parent" xml:space="preserve">
+    <value>colorGroup</value>
+  </data>
+  <data name="&gt;&gt;label9.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="colorGroup.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 240</value>
+  </data>
+  <data name="colorGroup.Size" type="System.Drawing.Size, System.Drawing">
+    <value>296, 160</value>
+  </data>
+  <data name="colorGroup.TabIndex" type="System.Int32, mscorlib">
+    <value>14</value>
+  </data>
+  <data name="colorGroup.Text" xml:space="preserve">
+    <value>Colors</value>
+  </data>
+  <data name="&gt;&gt;colorGroup.Name" xml:space="preserve">
+    <value>colorGroup</value>
+  </data>
+  <data name="&gt;&gt;colorGroup.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;colorGroup.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;colorGroup.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="alignmentGroup.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="rotationCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="rotationCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 78</value>
+  </data>
+  <data name="rotationCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>176, 21</value>
+  </data>
+  <data name="rotationCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name="&gt;&gt;rotationCombo.Name" xml:space="preserve">
+    <value>rotationCombo</value>
+  </data>
+  <data name="&gt;&gt;rotationCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;rotationCombo.Parent" xml:space="preserve">
+    <value>alignmentGroup</value>
+  </data>
+  <data name="&gt;&gt;rotationCombo.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="verticalCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="verticalCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 46</value>
+  </data>
+  <data name="verticalCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>176, 21</value>
+  </data>
+  <data name="verticalCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="&gt;&gt;verticalCombo.Name" xml:space="preserve">
+    <value>verticalCombo</value>
+  </data>
+  <data name="&gt;&gt;verticalCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;verticalCombo.Parent" xml:space="preserve">
+    <value>alignmentGroup</value>
+  </data>
+  <data name="&gt;&gt;verticalCombo.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="horizontalCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="horizontalCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 14</value>
+  </data>
+  <data name="horizontalCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>176, 21</value>
+  </data>
+  <data name="horizontalCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="&gt;&gt;horizontalCombo.Name" xml:space="preserve">
+    <value>horizontalCombo</value>
+  </data>
+  <data name="&gt;&gt;horizontalCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;horizontalCombo.Parent" xml:space="preserve">
+    <value>alignmentGroup</value>
+  </data>
+  <data name="&gt;&gt;horizontalCombo.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="label10.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label10.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 80</value>
+  </data>
+  <data name="label10.Size" type="System.Drawing.Size, System.Drawing">
+    <value>47, 13</value>
+  </data>
+  <data name="label10.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name="label10.Text" xml:space="preserve">
+    <value>Rotation</value>
+  </data>
+  <data name="&gt;&gt;label10.Name" xml:space="preserve">
+    <value>label10</value>
+  </data>
+  <data name="&gt;&gt;label10.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label10.Parent" xml:space="preserve">
+    <value>alignmentGroup</value>
+  </data>
+  <data name="&gt;&gt;label10.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="verticalLabel.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="verticalLabel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 48</value>
+  </data>
+  <data name="verticalLabel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>42, 13</value>
+  </data>
+  <data name="verticalLabel.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="verticalLabel.Text" xml:space="preserve">
+    <value>Vertical</value>
+  </data>
+  <data name="&gt;&gt;verticalLabel.Name" xml:space="preserve">
+    <value>verticalLabel</value>
+  </data>
+  <data name="&gt;&gt;verticalLabel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;verticalLabel.Parent" xml:space="preserve">
+    <value>alignmentGroup</value>
+  </data>
+  <data name="&gt;&gt;verticalLabel.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="horizontalLabel.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="horizontalLabel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 16</value>
+  </data>
+  <data name="horizontalLabel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>54, 13</value>
+  </data>
+  <data name="horizontalLabel.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="horizontalLabel.Text" xml:space="preserve">
+    <value>Horizontal</value>
+  </data>
+  <data name="&gt;&gt;horizontalLabel.Name" xml:space="preserve">
+    <value>horizontalLabel</value>
+  </data>
+  <data name="&gt;&gt;horizontalLabel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;horizontalLabel.Parent" xml:space="preserve">
+    <value>alignmentGroup</value>
+  </data>
+  <data name="&gt;&gt;horizontalLabel.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="alignmentGroup.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 408</value>
+  </data>
+  <data name="alignmentGroup.Size" type="System.Drawing.Size, System.Drawing">
+    <value>296, 112</value>
+  </data>
+  <data name="alignmentGroup.TabIndex" type="System.Int32, mscorlib">
+    <value>15</value>
+  </data>
+  <data name="alignmentGroup.Text" xml:space="preserve">
+    <value>Alignment</value>
+  </data>
+  <data name="&gt;&gt;alignmentGroup.Name" xml:space="preserve">
+    <value>alignmentGroup</value>
+  </data>
+  <data name="&gt;&gt;alignmentGroup.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;alignmentGroup.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;alignmentGroup.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="previewGroup.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="previewPicture.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="previewPicture.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 16</value>
+  </data>
+  <data name="previewPicture.Size" type="System.Drawing.Size, System.Drawing">
+    <value>280, 24</value>
+  </data>
+  <data name="previewPicture.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Name" xml:space="preserve">
+    <value>previewPicture</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Type" xml:space="preserve">
+    <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Parent" xml:space="preserve">
+    <value>previewGroup</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="previewGroup.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 528</value>
+  </data>
+  <data name="previewGroup.Size" type="System.Drawing.Size, System.Drawing">
+    <value>296, 48</value>
+  </data>
+  <data name="previewGroup.TabIndex" type="System.Int32, mscorlib">
+    <value>16</value>
+  </data>
+  <data name="previewGroup.Text" xml:space="preserve">
+    <value>Preview</value>
+  </data>
+  <data name="&gt;&gt;previewGroup.Name" xml:space="preserve">
+    <value>previewGroup</value>
+  </data>
+  <data name="&gt;&gt;previewGroup.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;previewGroup.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;previewGroup.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <metadata name="ComboBoxDataSet.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="DisplayLabel.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="DisplayLabel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="DisplayLabel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>126, 17</value>
+  </data>
+  <data name="DisplayLabel.TabIndex" type="System.Int32, mscorlib">
+    <value>17</value>
+  </data>
+  <data name="DisplayLabel.Text" xml:space="preserve">
+    <value>Display feature labels</value>
+  </data>
+  <data name="&gt;&gt;DisplayLabel.Name" xml:space="preserve">
+    <value>DisplayLabel</value>
+  </data>
+  <data name="&gt;&gt;DisplayLabel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;DisplayLabel.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;DisplayLabel.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScroll" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="$this.AutoScrollMinSize" type="System.Drawing.Size, System.Drawing">
+    <value>296, 576</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>296, 576</value>
+  </data>
+  <data name="&gt;&gt;UnitsTable.Name" xml:space="preserve">
+    <value>UnitsTable</value>
+  </data>
+  <data name="&gt;&gt;UnitsTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn5.Name" xml:space="preserve">
+    <value>dataColumn5</value>
+  </data>
+  <data name="&gt;&gt;dataColumn5.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn6.Name" xml:space="preserve">
+    <value>dataColumn6</value>
+  </data>
+  <data name="&gt;&gt;dataColumn6.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;SizeContextTable.Name" xml:space="preserve">
+    <value>SizeContextTable</value>
+  </data>
+  <data name="&gt;&gt;SizeContextTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn3.Name" xml:space="preserve">
+    <value>dataColumn3</value>
+  </data>
+  <data name="&gt;&gt;dataColumn3.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn4.Name" xml:space="preserve">
+    <value>dataColumn4</value>
+  </data>
+  <data name="&gt;&gt;dataColumn4.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;FontTable.Name" xml:space="preserve">
+    <value>FontTable</value>
+  </data>
+  <data name="&gt;&gt;FontTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn1.Name" xml:space="preserve">
+    <value>dataColumn1</value>
+  </data>
+  <data name="&gt;&gt;dataColumn1.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn2.Name" xml:space="preserve">
+    <value>dataColumn2</value>
+  </data>
+  <data name="&gt;&gt;dataColumn2.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;BackgroundTypeTable.Name" xml:space="preserve">
+    <value>BackgroundTypeTable</value>
+  </data>
+  <data name="&gt;&gt;BackgroundTypeTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn9.Name" xml:space="preserve">
+    <value>dataColumn9</value>
+  </data>
+  <data name="&gt;&gt;dataColumn9.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn10.Name" xml:space="preserve">
+    <value>dataColumn10</value>
+  </data>
+  <data name="&gt;&gt;dataColumn10.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;RotationTable.Name" xml:space="preserve">
+    <value>RotationTable</value>
+  </data>
+  <data name="&gt;&gt;RotationTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn7.Name" xml:space="preserve">
+    <value>dataColumn7</value>
+  </data>
+  <data name="&gt;&gt;dataColumn7.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn8.Name" xml:space="preserve">
+    <value>dataColumn8</value>
+  </data>
+  <data name="&gt;&gt;dataColumn8.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;VerticalTable.Name" xml:space="preserve">
+    <value>VerticalTable</value>
+  </data>
+  <data name="&gt;&gt;VerticalTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn13.Name" xml:space="preserve">
+    <value>dataColumn13</value>
+  </data>
+  <data name="&gt;&gt;dataColumn13.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn14.Name" xml:space="preserve">
+    <value>dataColumn14</value>
+  </data>
+  <data name="&gt;&gt;dataColumn14.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;HorizontalTable.Name" xml:space="preserve">
+    <value>HorizontalTable</value>
+  </data>
+  <data name="&gt;&gt;HorizontalTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn11.Name" xml:space="preserve">
+    <value>dataColumn11</value>
+  </data>
+  <data name="&gt;&gt;dataColumn11.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn12.Name" xml:space="preserve">
+    <value>dataColumn12</value>
+  </data>
+  <data name="&gt;&gt;dataColumn12.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ComboBoxDataSet.Name" xml:space="preserve">
+    <value>ComboBoxDataSet</value>
+  </data>
+  <data name="&gt;&gt;ComboBoxDataSet.Type" xml:space="preserve">
+    <value>System.Data.DataSet, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>FontStyleEditor</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineFeatureStyleEditor.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineFeatureStyleEditor.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineFeatureStyleEditor.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,670 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Collections.Generic;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.ObjectModels.FeatureSource;
+using Maestro.Editors.Common;
+using OSGeo.MapGuide.MaestroAPI.ObjectModels;
+
+namespace Maestro.Editors.LayerDefinition.Vector.StyleEditors
+{
+	/// <summary>
+	/// Summary description for LineFeatureStyleEditor.
+	/// </summary>
+	public class LineFeatureStyleEditor : System.Windows.Forms.UserControl
+	{
+		/// <summary>
+		/// Required designer variable.
+		/// </summary>
+		private System.ComponentModel.Container components = null;
+		private System.Windows.Forms.GroupBox CompositeGroup;
+		private System.Windows.Forms.Panel AdvancedPanel;
+		private System.Windows.Forms.Label label3;
+		private System.Windows.Forms.Label label2;
+		private System.Windows.Forms.PictureBox previewPicture;
+		private System.Windows.Forms.CheckBox applyLineStyle;
+		private System.Windows.Forms.CheckBox compositeLines;
+		private System.Windows.Forms.ListBox lineStyles;
+		private System.Windows.Forms.Panel propertyPanel;
+		private System.Windows.Forms.ComboBox sizeUnitsCombo;
+		private System.Windows.Forms.ComboBox sizeContextCombo;
+		private LineStyleEditor lineStyleEditor;
+		
+		private IList<StrokeType> m_item = null;
+		private System.Windows.Forms.Panel compositePanel;
+		private System.Windows.Forms.GroupBox lineGroup;
+		private System.Windows.Forms.GroupBox sizeGroup;
+		private System.Windows.Forms.GroupBox previewGroup;
+		private System.Data.DataSet ComboBoxDataSet;
+		private System.Data.DataTable SizeContextTable;
+		private System.Data.DataColumn dataColumn3;
+		private System.Data.DataColumn dataColumn4;
+		private System.Data.DataTable UnitsTable;
+		private System.Data.DataColumn dataColumn5;
+		private System.Data.DataColumn dataColumn6;
+		private bool m_inUpdate = false;
+        private ToolStrip toolStrip1;
+        private ToolStripButton AddStyleButton;
+        private ToolStripButton RemoveStyleButton;
+
+		public event EventHandler Changed;
+
+        private IEditorService m_editor;
+        private FeatureSourceDescription.FeatureSourceSchema m_schema;
+        private string m_featureSource;
+        private string m_providername;
+
+        public LineFeatureStyleEditor(IEditorService editor, FeatureSourceDescription.FeatureSourceSchema schema, string featureSource)
+            : this()
+        {
+            m_editor = editor;
+            m_schema = schema;
+
+            var fs = (FeatureSourceType)editor.ResourceService.GetResource(featureSource);
+
+            m_providername = fs.Provider;
+            m_featureSource = featureSource;
+        }
+
+		private LineFeatureStyleEditor()
+		{
+			//
+			// Required for Windows Form Designer support
+			//
+			InitializeComponent();
+            using (System.IO.StringReader sr = new System.IO.StringReader(Properties.Resources.GeometryStyleComboDataset))
+                ComboBoxDataSet.ReadXml(sr);
+
+			lineStyleEditor.displayLine.Visible = false;
+            lineStyleEditor.thicknessCombo.SelectedIndexChanged += new EventHandler(thicknessCombo_SelectedIndexChanged);
+            lineStyleEditor.thicknessCombo.TextChanged += new EventHandler(thicknessCombo_TextChanged);
+            lineStyleEditor.colorCombo.CurrentColorChanged += new EventHandler(colorCombo_CurrentValueChanged);
+			lineStyleEditor.fillCombo.SelectedIndexChanged += new EventHandler(fillCombo_SelectedIndexChanged);
+		}
+
+		public void UpdateDisplay()
+		{
+			try
+			{
+				m_inUpdate = true;
+				applyLineStyle.Checked = (m_item != null && m_item.Count != 0);
+
+				lineStyles.Items.Clear();
+				if (applyLineStyle.Checked)
+					foreach(StrokeType st in m_item)
+						lineStyles.Items.Add(st);
+
+				compositeLines.Checked = lineStyles.Items.Count > 1;
+				if (lineStyles.Items.Count > 0)
+					lineStyles.SelectedIndex = 0;
+
+				UpdateDisplayForSelected();
+
+			}
+			finally
+			{
+				m_inUpdate = false;
+			}
+
+		}
+
+		private void UpdateDisplayForSelected()
+		{
+			bool prevUpdate = m_inUpdate;
+			try
+			{
+				m_inUpdate = true;
+				StrokeType st = this.CurrentStrokeType;
+				sizeGroup.Enabled = 
+				lineGroup.Enabled =
+				previewGroup.Enabled =
+					st != null;
+
+                RemoveStyleButton.Enabled = st != null && m_item.Count > 1;
+
+				if (st != null)
+				{
+				    sizeUnitsCombo.SelectedValue = st.Unit.ToString();
+                    
+                    //sizeContextCombo.SelectedValue = st.SizeContext.ToString();
+
+                    if (st.Color == null)
+                        lineStyleEditor.colorCombo.CurrentColor = Color.Black;
+                    else
+                        lineStyleEditor.colorCombo.CurrentColor = Utility.ParseHTMLColor(st.Color);
+
+                    foreach(object i in lineStyleEditor.fillCombo.Items)
+                        if (i as ImageStylePicker.NamedImage != null && (i as ImageStylePicker.NamedImage).Name == st.LineStyle)
+                        {
+                            lineStyleEditor.fillCombo.SelectedItem = i;
+                            break;
+                        }
+
+                    lineStyleEditor.thicknessCombo.Text = st.Thickness;
+				}
+				previewPicture.Refresh();
+			} 
+			finally
+			{
+				m_inUpdate = prevUpdate;
+			}
+
+		}
+
+		private StrokeType CurrentStrokeType
+		{
+			get 
+			{
+				if (lineStyles.Items.Count == 0)
+					return null;
+				else if (lineStyles.Items.Count == 1 || lineStyles.SelectedIndex <= 0)
+					return (StrokeType)lineStyles.Items[0];
+				else
+					return (StrokeType)lineStyles.SelectedItem;
+			}
+		}
+
+		/// <summary>
+		/// Clean up any resources being used.
+		/// </summary>
+		protected override void Dispose( bool disposing )
+		{
+			if( disposing )
+			{
+				if(components != null)
+				{
+					components.Dispose();
+				}
+			}
+			base.Dispose( disposing );
+		}
+
+		#region Windows Form Designer generated code
+		/// <summary>
+		/// Required method for Designer support - do not modify
+		/// the contents of this method with the code editor.
+		/// </summary>
+		private void InitializeComponent()
+		{
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LineFeatureStyleEditor));
+            this.applyLineStyle = new System.Windows.Forms.CheckBox();
+            this.compositeLines = new System.Windows.Forms.CheckBox();
+            this.CompositeGroup = new System.Windows.Forms.GroupBox();
+            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.AddStyleButton = new System.Windows.Forms.ToolStripButton();
+            this.RemoveStyleButton = new System.Windows.Forms.ToolStripButton();
+            this.lineStyles = new System.Windows.Forms.ListBox();
+            this.AdvancedPanel = new System.Windows.Forms.Panel();
+            this.compositePanel = new System.Windows.Forms.Panel();
+            this.propertyPanel = new System.Windows.Forms.Panel();
+            this.lineGroup = new System.Windows.Forms.GroupBox();
+            this.lineStyleEditor = new LineStyleEditor();
+            this.sizeGroup = new System.Windows.Forms.GroupBox();
+            this.sizeUnitsCombo = new System.Windows.Forms.ComboBox();
+            this.UnitsTable = new System.Data.DataTable();
+            this.dataColumn5 = new System.Data.DataColumn();
+            this.dataColumn6 = new System.Data.DataColumn();
+            this.sizeContextCombo = new System.Windows.Forms.ComboBox();
+            this.SizeContextTable = new System.Data.DataTable();
+            this.dataColumn3 = new System.Data.DataColumn();
+            this.dataColumn4 = new System.Data.DataColumn();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.previewGroup = new System.Windows.Forms.GroupBox();
+            this.previewPicture = new System.Windows.Forms.PictureBox();
+            this.ComboBoxDataSet = new System.Data.DataSet();
+            this.CompositeGroup.SuspendLayout();
+            this.toolStrip1.SuspendLayout();
+            this.AdvancedPanel.SuspendLayout();
+            this.compositePanel.SuspendLayout();
+            this.propertyPanel.SuspendLayout();
+            this.lineGroup.SuspendLayout();
+            this.sizeGroup.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.UnitsTable)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.SizeContextTable)).BeginInit();
+            this.previewGroup.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.previewPicture)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboBoxDataSet)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // applyLineStyle
+            // 
+            this.applyLineStyle.Checked = true;
+            this.applyLineStyle.CheckState = System.Windows.Forms.CheckState.Checked;
+            resources.ApplyResources(this.applyLineStyle, "applyLineStyle");
+            this.applyLineStyle.Name = "applyLineStyle";
+            this.applyLineStyle.CheckedChanged += new System.EventHandler(this.applyLineStyle_CheckedChanged);
+            // 
+            // compositeLines
+            // 
+            this.compositeLines.Checked = true;
+            this.compositeLines.CheckState = System.Windows.Forms.CheckState.Checked;
+            resources.ApplyResources(this.compositeLines, "compositeLines");
+            this.compositeLines.Name = "compositeLines";
+            this.compositeLines.CheckedChanged += new System.EventHandler(this.compositeLines_CheckedChanged);
+            // 
+            // CompositeGroup
+            // 
+            this.CompositeGroup.Controls.Add(this.toolStrip1);
+            this.CompositeGroup.Controls.Add(this.lineStyles);
+            resources.ApplyResources(this.CompositeGroup, "CompositeGroup");
+            this.CompositeGroup.Name = "CompositeGroup";
+            this.CompositeGroup.TabStop = false;
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.AddStyleButton,
+            this.RemoveStyleButton});
+            resources.ApplyResources(this.toolStrip1, "toolStrip1");
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
+            // 
+            // AddStyleButton
+            // 
+            this.AddStyleButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            resources.ApplyResources(this.AddStyleButton, "AddStyleButton");
+            this.AddStyleButton.Name = "AddStyleButton";
+            this.AddStyleButton.Click += new System.EventHandler(this.AddStyleButton_Click);
+            // 
+            // RemoveStyleButton
+            // 
+            this.RemoveStyleButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            resources.ApplyResources(this.RemoveStyleButton, "RemoveStyleButton");
+            this.RemoveStyleButton.Name = "RemoveStyleButton";
+            this.RemoveStyleButton.Click += new System.EventHandler(this.RemoveStyleButton_Click);
+            // 
+            // lineStyles
+            // 
+            resources.ApplyResources(this.lineStyles, "lineStyles");
+            this.lineStyles.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
+            this.lineStyles.Name = "lineStyles";
+            this.lineStyles.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.lineStyles_DrawItem);
+            this.lineStyles.SelectedIndexChanged += new System.EventHandler(this.lineStyles_SelectedIndexChanged);
+            // 
+            // AdvancedPanel
+            // 
+            this.AdvancedPanel.Controls.Add(this.compositeLines);
+            this.AdvancedPanel.Controls.Add(this.applyLineStyle);
+            resources.ApplyResources(this.AdvancedPanel, "AdvancedPanel");
+            this.AdvancedPanel.Name = "AdvancedPanel";
+            // 
+            // compositePanel
+            // 
+            this.compositePanel.Controls.Add(this.CompositeGroup);
+            resources.ApplyResources(this.compositePanel, "compositePanel");
+            this.compositePanel.Name = "compositePanel";
+            // 
+            // propertyPanel
+            // 
+            this.propertyPanel.Controls.Add(this.lineGroup);
+            this.propertyPanel.Controls.Add(this.sizeGroup);
+            resources.ApplyResources(this.propertyPanel, "propertyPanel");
+            this.propertyPanel.Name = "propertyPanel";
+            // 
+            // lineGroup
+            // 
+            this.lineGroup.Controls.Add(this.lineStyleEditor);
+            resources.ApplyResources(this.lineGroup, "lineGroup");
+            this.lineGroup.Name = "lineGroup";
+            this.lineGroup.TabStop = false;
+            // 
+            // lineStyleEditor
+            // 
+            resources.ApplyResources(this.lineStyleEditor, "lineStyleEditor");
+            this.lineStyleEditor.Name = "lineStyleEditor";
+            // 
+            // sizeGroup
+            // 
+            this.sizeGroup.Controls.Add(this.sizeUnitsCombo);
+            this.sizeGroup.Controls.Add(this.sizeContextCombo);
+            this.sizeGroup.Controls.Add(this.label3);
+            this.sizeGroup.Controls.Add(this.label2);
+            resources.ApplyResources(this.sizeGroup, "sizeGroup");
+            this.sizeGroup.Name = "sizeGroup";
+            this.sizeGroup.TabStop = false;
+            // 
+            // sizeUnitsCombo
+            // 
+            resources.ApplyResources(this.sizeUnitsCombo, "sizeUnitsCombo");
+            this.sizeUnitsCombo.DataSource = this.UnitsTable;
+            this.sizeUnitsCombo.DisplayMember = "Display";
+            this.sizeUnitsCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.sizeUnitsCombo.Name = "sizeUnitsCombo";
+            this.sizeUnitsCombo.ValueMember = "Value";
+            this.sizeUnitsCombo.SelectedIndexChanged += new System.EventHandler(this.sizeUnitsCombo_SelectedIndexChanged);
+            // 
+            // UnitsTable
+            // 
+            this.UnitsTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn5,
+            this.dataColumn6});
+            this.UnitsTable.TableName = "Units";
+            // 
+            // dataColumn5
+            // 
+            this.dataColumn5.Caption = "Display";
+            this.dataColumn5.ColumnName = "Display";
+            // 
+            // dataColumn6
+            // 
+            this.dataColumn6.Caption = "Value";
+            this.dataColumn6.ColumnName = "Value";
+            // 
+            // sizeContextCombo
+            // 
+            resources.ApplyResources(this.sizeContextCombo, "sizeContextCombo");
+            this.sizeContextCombo.DataSource = this.SizeContextTable;
+            this.sizeContextCombo.DisplayMember = "Display";
+            this.sizeContextCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.sizeContextCombo.Name = "sizeContextCombo";
+            this.sizeContextCombo.ValueMember = "Value";
+            this.sizeContextCombo.SelectedIndexChanged += new System.EventHandler(this.sizeContextCombo_SelectedIndexChanged);
+            // 
+            // SizeContextTable
+            // 
+            this.SizeContextTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn3,
+            this.dataColumn4});
+            this.SizeContextTable.TableName = "SizeContext";
+            // 
+            // dataColumn3
+            // 
+            this.dataColumn3.Caption = "Display";
+            this.dataColumn3.ColumnName = "Display";
+            // 
+            // dataColumn4
+            // 
+            this.dataColumn4.Caption = "Value";
+            this.dataColumn4.ColumnName = "Value";
+            // 
+            // label3
+            // 
+            resources.ApplyResources(this.label3, "label3");
+            this.label3.Name = "label3";
+            // 
+            // label2
+            // 
+            resources.ApplyResources(this.label2, "label2");
+            this.label2.Name = "label2";
+            // 
+            // previewGroup
+            // 
+            this.previewGroup.Controls.Add(this.previewPicture);
+            resources.ApplyResources(this.previewGroup, "previewGroup");
+            this.previewGroup.Name = "previewGroup";
+            this.previewGroup.TabStop = false;
+            // 
+            // previewPicture
+            // 
+            resources.ApplyResources(this.previewPicture, "previewPicture");
+            this.previewPicture.BackColor = System.Drawing.Color.White;
+            this.previewPicture.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.previewPicture.Name = "previewPicture";
+            this.previewPicture.TabStop = false;
+            this.previewPicture.Paint += new System.Windows.Forms.PaintEventHandler(this.previewPicture_Paint);
+            // 
+            // ComboBoxDataSet
+            // 
+            this.ComboBoxDataSet.DataSetName = "ComboBoxDataSet";
+            this.ComboBoxDataSet.Locale = new System.Globalization.CultureInfo("da-DK");
+            this.ComboBoxDataSet.Tables.AddRange(new System.Data.DataTable[] {
+            this.SizeContextTable,
+            this.UnitsTable});
+            // 
+            // LineFeatureStyleEditor
+            // 
+            resources.ApplyResources(this, "$this");
+            this.Controls.Add(this.previewGroup);
+            this.Controls.Add(this.propertyPanel);
+            this.Controls.Add(this.compositePanel);
+            this.Controls.Add(this.AdvancedPanel);
+            this.Name = "LineFeatureStyleEditor";
+            this.CompositeGroup.ResumeLayout(false);
+            this.CompositeGroup.PerformLayout();
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.AdvancedPanel.ResumeLayout(false);
+            this.compositePanel.ResumeLayout(false);
+            this.propertyPanel.ResumeLayout(false);
+            this.lineGroup.ResumeLayout(false);
+            this.sizeGroup.ResumeLayout(false);
+            this.sizeGroup.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.UnitsTable)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.SizeContextTable)).EndInit();
+            this.previewGroup.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.previewPicture)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboBoxDataSet)).EndInit();
+            this.ResumeLayout(false);
+
+		}
+		#endregion
+
+
+		private void lineStyles_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			UpdateDisplayForSelected();
+		}
+
+		private void sizeContextCombo_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+            //this.CurrentStrokeType.SizeContext = (SizeContextType)Enum.Parse(typeof(SizeContextType), (string)sizeContextCombo.SelectedValue);
+            previewPicture.Refresh();
+            lineStyles.Refresh();
+            if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void sizeUnitsCombo_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate || this.CurrentStrokeType == null)
+				return;
+			this.CurrentStrokeType.Unit = (LengthUnitType)Enum.Parse(typeof(LengthUnitType), (string)sizeUnitsCombo.SelectedValue);
+			previewPicture.Refresh();
+			lineStyles.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		public IList<StrokeType> Item
+		{
+			get { return m_item; }
+			set
+			{
+				m_item = value;
+				UpdateDisplay();
+			}
+		}
+
+        private void thicknessCombo_TextChanged(object sender, EventArgs e)
+        {
+            if (m_inUpdate || lineStyleEditor.thicknessCombo.SelectedIndex != -1)
+                return;
+
+            //TODO: Validate
+            this.CurrentStrokeType.Thickness = lineStyleEditor.thicknessCombo.Text;
+            previewPicture.Refresh();
+            if (Changed != null)
+                Changed(this, new EventArgs());
+        }
+
+        private void thicknessCombo_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (m_inUpdate || lineStyleEditor.thicknessCombo.SelectedIndex != lineStyleEditor.thicknessCombo.Items.Count - 1)
+                return;
+
+            string current = this.CurrentStrokeType.Thickness;
+            string expr = m_editor.EditExpression(current, m_schema, m_providername, m_featureSource);
+            if (!string.IsNullOrEmpty(expr))
+                current = expr;
+
+            //This is required as we cannot update the text from within the SelectedIndexChanged event :(
+            BeginInvoke(new UpdateComboTextFromSelectChangedDelegate(UpdateComboTextFromSelectChanged), lineStyleEditor.thicknessCombo, current, expr != null);
+        }
+
+		private void colorCombo_CurrentValueChanged(object sender, EventArgs e)
+		{
+            if (m_inUpdate || this.CurrentStrokeType == null)
+				return;
+            this.CurrentStrokeType.Color = Utility.SerializeHTMLColor(lineStyleEditor.colorCombo.CurrentColor, true);
+			previewPicture.Refresh();
+			lineStyles.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void fillCombo_SelectedIndexChanged(object sender, EventArgs e)
+		{
+            if (m_inUpdate || this.CurrentStrokeType == null)
+				return;
+
+            if (lineStyleEditor.fillCombo.SelectedItem as ImageStylePicker.NamedImage != null)
+                this.CurrentStrokeType.LineStyle = (lineStyleEditor.fillCombo.SelectedItem as ImageStylePicker.NamedImage).Name;
+			previewPicture.Refresh();
+			lineStyles.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void applyLineStyle_CheckedChanged(object sender, System.EventArgs e)
+		{
+			compositePanel.Enabled = 
+			compositeLines.Enabled = 
+			sizeGroup.Enabled = 
+			lineGroup.Enabled =
+			previewGroup.Enabled =
+				applyLineStyle.Checked;
+
+            if (!m_inUpdate)
+            {
+                if (!applyLineStyle.Checked)
+                {
+                    applyLineStyle.Tag = m_item;
+                    m_item = new BindingList<StrokeType>();
+                }
+                else
+                {
+                    m_item = applyLineStyle.Tag as IList<StrokeType>;
+
+                    if (m_item == null)
+                        m_item = new BindingList<StrokeType>();
+
+                    if (m_item.Count == 0)
+                        m_item.Add(ObjectFactory.CreateDefaultStroke());
+
+                    UpdateDisplay();
+                }
+            }
+		}
+
+		private void compositeLines_CheckedChanged(object sender, System.EventArgs e)
+		{
+			if (compositePanel.Visible && !compositeLines.Checked)
+				this.AutoScrollMinSize = new Size(this.AutoScrollMinSize.Width, this.AutoScrollMinSize.Height - compositePanel.Height);
+			else if (!compositePanel.Visible && compositeLines.Checked)
+                this.AutoScrollMinSize = new Size(this.AutoScrollMinSize.Width, this.AutoScrollMinSize.Height + compositePanel.Height);
+
+			compositePanel.Visible = compositeLines.Checked;
+
+			if (m_inUpdate)
+				return;
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void previewPicture_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
+		{
+			FeaturePreviewRender.RenderPreviewLine(e.Graphics, new Rectangle(1, 1, previewPicture.Width - 2, previewPicture.Height - 2), m_item);		
+		}
+
+		private void lineStyles_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
+		{
+			e.DrawBackground();
+            if ((e.State & DrawItemState.Focus) != 0)
+                e.DrawFocusRectangle();
+            
+            if (e.Index >= 0 && e.Index < lineStyles.Items.Count)
+			{
+                var col = new BindingList<StrokeType>();
+				col.Add((StrokeType) lineStyles.Items[e.Index]);
+				FeaturePreviewRender.RenderPreviewLine(e.Graphics, new Rectangle(e.Bounds.Left + 1, e.Bounds.Top + 1, e.Bounds.Width - 2, e.Bounds.Height - 2), col);		
+			}
+		}
+
+        private void RemoveStyleButton_Click(object sender, EventArgs e)
+        {
+            for(int i = 0; i < m_item.Count; i++)
+                if (m_item[i] == this.CurrentStrokeType)
+                {
+                    m_item.RemoveAt(i);
+                    UpdateDisplay();
+                    break;
+                }
+
+        }
+
+        private void AddStyleButton_Click(object sender, EventArgs e)
+        {
+            m_item.Add(ObjectFactory.CreateDefaultStroke());
+            UpdateDisplay();
+            lineStyles.SelectedIndex = lineStyles.Items.Count - 1;
+        }
+
+        internal void SetupForTheming()
+        {
+            lineStyleEditor.colorCombo.Enabled =
+            lineStyleEditor.lblColor.Enabled =
+            AdvancedPanel.Enabled =
+                false;
+        }
+
+        public delegate void UpdateComboTextFromSelectChangedDelegate(ComboBox owner, string text, bool userChange);
+
+        private void UpdateComboTextFromSelectChanged(ComboBox owner, string text, bool userChange)
+        {
+            try
+            {
+                if (!userChange)
+                    m_inUpdate = true;
+                owner.SelectedIndex = -1;
+
+                //HACK: Odd bug, don't remove
+                if (owner.SelectedIndex != -1)
+                    owner.SelectedIndex = -1;
+
+                owner.Text = text;
+            }
+            finally
+            {
+                if (!userChange)
+                    m_inUpdate = false;
+            }
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineFeatureStyleEditor.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineFeatureStyleEditor.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineFeatureStyleEditor.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,678 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="applyLineStyle.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
+    <value>System</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="applyLineStyle.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="applyLineStyle.Size" type="System.Drawing.Size, System.Drawing">
+    <value>176, 16</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="applyLineStyle.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="applyLineStyle.Text" xml:space="preserve">
+    <value>Apply line style</value>
+  </data>
+  <data name="&gt;&gt;applyLineStyle.Name" xml:space="preserve">
+    <value>applyLineStyle</value>
+  </data>
+  <data name="&gt;&gt;applyLineStyle.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;applyLineStyle.Parent" xml:space="preserve">
+    <value>AdvancedPanel</value>
+  </data>
+  <data name="&gt;&gt;applyLineStyle.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="compositeLines.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
+    <value>System</value>
+  </data>
+  <data name="compositeLines.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 24</value>
+  </data>
+  <data name="compositeLines.Size" type="System.Drawing.Size, System.Drawing">
+    <value>272, 16</value>
+  </data>
+  <data name="compositeLines.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="compositeLines.Text" xml:space="preserve">
+    <value>Use composite lines</value>
+  </data>
+  <data name="&gt;&gt;compositeLines.Name" xml:space="preserve">
+    <value>compositeLines</value>
+  </data>
+  <data name="&gt;&gt;compositeLines.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;compositeLines.Parent" xml:space="preserve">
+    <value>AdvancedPanel</value>
+  </data>
+  <data name="&gt;&gt;compositeLines.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>3, 16</value>
+  </metadata>
+  <data name="AddStyleButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPfZLfS1NhHMb9VxwpCRGWF6VJpBBRhN1EV2I3
+        4sbpykWFRZZJGEFKugILnP0QJ+FYGtTFXLR2QMYs2fK4UeqOs4GyqRx0asEefV47y+M59cID7+F838/7
+        fZ73W1S0syJfFASDMmR53FL8R/n9AbDetHgwn89jbf3Xf0WA1/vWDCGAh7OrWwZpOQ2Zlc0/2kAg8AlK
+        QjVD9gLmfy4j8WNBFKrptcKe3z7faEGGTqwAhGRWNsB8CJ1TlwSMWSTVtDGPfwF48Gs0UbBFOxOT08Ku
+        IVBSN7d+i0LdAm+jhf2AcPSbNUAPcS+Ae1qIfZ9B9/unuDZ0HU73VYSUsLkDK8BiJgfPmBdnXLW4G7qJ
+        Z1NP8GiiAxdf18HRY//7nLSgA/TkaYHtVnZWwClLuB9rhZKewmD8JVoizajtr7IGsG0+GdXu6UDVQDns
+        4w1oCUvIalkBuBJuxLl3NbjQc3oXonfAlHVAVFHh6JNQ4SmDnAyKw5xWDhf3dv9lHHpwYBfACaMFvvvs
+        fBaTsTkh54sbODJQKm7vjbdjNbeMj6kRdMXu4OzoSWHP0AH9U7MLmpBP/ozDLhvqQqVwxMuwqKXgTt7C
+        pchBHBsswe03reYO2AXT18Wi6lfFkKaL4U7Xo23mBM5/sOHUw+PGEGmD4oTt173nbSKwym4bah4fheRq
+        wvCITwC2AbpY3noXadHQAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="AddStyleButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="AddStyleButton.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
+  </data>
+  <data name="RemoveStyleButton.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="RemoveStyleButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAH0SURBVDhPfZPfS1NhHMb9XwQRFIQ0iALBm91MUSLEsCtv
+        xIwof4AXw0GtQU2U6EJYXRVCEOqJijhsHPTIgSn+wsliMLUjUyynljq32dyTz3t4546bHvjwvudwvs/5
+        Ps/7PWVl59f8YgS6bsAwQjbkM65EVQPg+0UXC9OZfzhOnl5LMKjh66RSLEIBFu/9yeRJHKRgkRbPuNe0
+        aUSiJiYmPttFCgU2t/YRjcUFLOLKIqIoX/LYREoJsIBizIfr+uaeEJvSQ/hpboN28llc1cGvxAkWln8U
+        2EqLe9q1CTBhhkivhRa4X1qJ2nJhRyUFZIhSgBbM7WNhIRZZQ8jvx4zbhe8uF2Kz88UdXBaQIRrjCrR7
+        Tuz4nuHowzvsj45gqaMNn552X2RAC1KAX5WnEF5Yheq8jb/ufpy9eYmc/7VYU14XwncdpQVoQR6b6vNh
+        o7Ee2YFHyL1yIzfssRjsxW57E4L3my0R2QGHRgqsREyoPU+w47iFA11DMrFr43f/QwTu1FgCnDBa4ODw
+        vJfDGwIGZjpu4MjTh5P3IxZj57wdEh3Qnq0D+ifr8UNBSDUwV1+DVGstcl11ebIPbgph44W7uAN2wQGS
+        6N7nCDuqkeyoRPZxOTKdFYi3VENxNthDpA3CCbvMR68H39qaEGioEm3zCOVf+R87WeXQgnPczgAAAABJ
+        RU5ErkJggg==
+</value>
+  </data>
+  <data name="RemoveStyleButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="RemoveStyleButton.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
+  </data>
+  <data name="toolStrip1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 16</value>
+  </data>
+  <data name="toolStrip1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>291, 25</value>
+  </data>
+  <data name="toolStrip1.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Name" xml:space="preserve">
+    <value>toolStrip1</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Parent" xml:space="preserve">
+    <value>CompositeGroup</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="lineStyles.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left, Right</value>
+  </data>
+  <data name="lineStyles.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 56</value>
+  </data>
+  <data name="lineStyles.Size" type="System.Drawing.Size, System.Drawing">
+    <value>265, 95</value>
+  </data>
+  <data name="lineStyles.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;lineStyles.Name" xml:space="preserve">
+    <value>lineStyles</value>
+  </data>
+  <data name="&gt;&gt;lineStyles.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;lineStyles.Parent" xml:space="preserve">
+    <value>CompositeGroup</value>
+  </data>
+  <data name="&gt;&gt;lineStyles.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="CompositeGroup.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="CompositeGroup.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="CompositeGroup.Size" type="System.Drawing.Size, System.Drawing">
+    <value>297, 160</value>
+  </data>
+  <data name="CompositeGroup.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="CompositeGroup.Text" xml:space="preserve">
+    <value>Composite line</value>
+  </data>
+  <data name="&gt;&gt;CompositeGroup.Name" xml:space="preserve">
+    <value>CompositeGroup</value>
+  </data>
+  <data name="&gt;&gt;CompositeGroup.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;CompositeGroup.Parent" xml:space="preserve">
+    <value>compositePanel</value>
+  </data>
+  <data name="&gt;&gt;CompositeGroup.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="AdvancedPanel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="AdvancedPanel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="AdvancedPanel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>297, 48</value>
+  </data>
+  <data name="AdvancedPanel.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;AdvancedPanel.Name" xml:space="preserve">
+    <value>AdvancedPanel</value>
+  </data>
+  <data name="&gt;&gt;AdvancedPanel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;AdvancedPanel.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;AdvancedPanel.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="compositePanel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="compositePanel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 48</value>
+  </data>
+  <data name="compositePanel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>297, 160</value>
+  </data>
+  <data name="compositePanel.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="&gt;&gt;compositePanel.Name" xml:space="preserve">
+    <value>compositePanel</value>
+  </data>
+  <data name="&gt;&gt;compositePanel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;compositePanel.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;compositePanel.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="lineStyleEditor.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="lineStyleEditor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 16</value>
+  </data>
+  <data name="lineStyleEditor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>291, 133</value>
+  </data>
+  <data name="lineStyleEditor.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;lineStyleEditor.Name" xml:space="preserve">
+    <value>lineStyleEditor</value>
+  </data>
+  <data name="&gt;&gt;lineStyleEditor.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.LineStyleEditor, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4437, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;lineStyleEditor.Parent" xml:space="preserve">
+    <value>lineGroup</value>
+  </data>
+  <data name="&gt;&gt;lineStyleEditor.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="lineGroup.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="lineGroup.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 80</value>
+  </data>
+  <data name="lineGroup.Size" type="System.Drawing.Size, System.Drawing">
+    <value>297, 152</value>
+  </data>
+  <data name="lineGroup.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="lineGroup.Text" xml:space="preserve">
+    <value>Line style</value>
+  </data>
+  <data name="&gt;&gt;lineGroup.Name" xml:space="preserve">
+    <value>lineGroup</value>
+  </data>
+  <data name="&gt;&gt;lineGroup.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;lineGroup.Parent" xml:space="preserve">
+    <value>propertyPanel</value>
+  </data>
+  <data name="&gt;&gt;lineGroup.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="sizeUnitsCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="sizeUnitsCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>120, 44</value>
+  </data>
+  <data name="sizeUnitsCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>169, 21</value>
+  </data>
+  <data name="sizeUnitsCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name="&gt;&gt;sizeUnitsCombo.Name" xml:space="preserve">
+    <value>sizeUnitsCombo</value>
+  </data>
+  <data name="&gt;&gt;sizeUnitsCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;sizeUnitsCombo.Parent" xml:space="preserve">
+    <value>sizeGroup</value>
+  </data>
+  <data name="&gt;&gt;sizeUnitsCombo.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="sizeContextCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="sizeContextCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>120, 12</value>
+  </data>
+  <data name="sizeContextCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>169, 21</value>
+  </data>
+  <data name="sizeContextCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="&gt;&gt;sizeContextCombo.Name" xml:space="preserve">
+    <value>sizeContextCombo</value>
+  </data>
+  <data name="&gt;&gt;sizeContextCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;sizeContextCombo.Parent" xml:space="preserve">
+    <value>sizeGroup</value>
+  </data>
+  <data name="&gt;&gt;sizeContextCombo.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="label3.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 52</value>
+  </data>
+  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>52, 13</value>
+  </data>
+  <data name="label3.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="label3.Text" xml:space="preserve">
+    <value>Size units</value>
+  </data>
+  <data name="&gt;&gt;label3.Name" xml:space="preserve">
+    <value>label3</value>
+  </data>
+  <data name="&gt;&gt;label3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label3.Parent" xml:space="preserve">
+    <value>sizeGroup</value>
+  </data>
+  <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="label2.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 20</value>
+  </data>
+  <data name="label2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>65, 13</value>
+  </data>
+  <data name="label2.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="label2.Text" xml:space="preserve">
+    <value>Size context</value>
+  </data>
+  <data name="&gt;&gt;label2.Name" xml:space="preserve">
+    <value>label2</value>
+  </data>
+  <data name="&gt;&gt;label2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label2.Parent" xml:space="preserve">
+    <value>sizeGroup</value>
+  </data>
+  <data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="sizeGroup.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="sizeGroup.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="sizeGroup.Size" type="System.Drawing.Size, System.Drawing">
+    <value>297, 80</value>
+  </data>
+  <data name="sizeGroup.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="sizeGroup.Text" xml:space="preserve">
+    <value>Size</value>
+  </data>
+  <data name="&gt;&gt;sizeGroup.Name" xml:space="preserve">
+    <value>sizeGroup</value>
+  </data>
+  <data name="&gt;&gt;sizeGroup.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;sizeGroup.Parent" xml:space="preserve">
+    <value>propertyPanel</value>
+  </data>
+  <data name="&gt;&gt;sizeGroup.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="propertyPanel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="propertyPanel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 208</value>
+  </data>
+  <data name="propertyPanel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>297, 232</value>
+  </data>
+  <data name="propertyPanel.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;propertyPanel.Name" xml:space="preserve">
+    <value>propertyPanel</value>
+  </data>
+  <data name="&gt;&gt;propertyPanel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;propertyPanel.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;propertyPanel.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="previewPicture.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="previewPicture.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 16</value>
+  </data>
+  <data name="previewPicture.Size" type="System.Drawing.Size, System.Drawing">
+    <value>281, 24</value>
+  </data>
+  <data name="previewPicture.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Name" xml:space="preserve">
+    <value>previewPicture</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Type" xml:space="preserve">
+    <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Parent" xml:space="preserve">
+    <value>previewGroup</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="previewGroup.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="previewGroup.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 440</value>
+  </data>
+  <data name="previewGroup.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
+    <value>3, 12, 3, 3</value>
+  </data>
+  <data name="previewGroup.Size" type="System.Drawing.Size, System.Drawing">
+    <value>297, 48</value>
+  </data>
+  <data name="previewGroup.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="previewGroup.Text" xml:space="preserve">
+    <value>Preview</value>
+  </data>
+  <data name="&gt;&gt;previewGroup.Name" xml:space="preserve">
+    <value>previewGroup</value>
+  </data>
+  <data name="&gt;&gt;previewGroup.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;previewGroup.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;previewGroup.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="ComboBoxDataSet.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScroll" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="$this.AutoScrollMinSize" type="System.Drawing.Size, System.Drawing">
+    <value>290, 488</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>297, 488</value>
+  </data>
+  <data name="&gt;&gt;AddStyleButton.Name" xml:space="preserve">
+    <value>AddStyleButton</value>
+  </data>
+  <data name="&gt;&gt;AddStyleButton.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;RemoveStyleButton.Name" xml:space="preserve">
+    <value>RemoveStyleButton</value>
+  </data>
+  <data name="&gt;&gt;RemoveStyleButton.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;UnitsTable.Name" xml:space="preserve">
+    <value>UnitsTable</value>
+  </data>
+  <data name="&gt;&gt;UnitsTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn5.Name" xml:space="preserve">
+    <value>dataColumn5</value>
+  </data>
+  <data name="&gt;&gt;dataColumn5.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn6.Name" xml:space="preserve">
+    <value>dataColumn6</value>
+  </data>
+  <data name="&gt;&gt;dataColumn6.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;SizeContextTable.Name" xml:space="preserve">
+    <value>SizeContextTable</value>
+  </data>
+  <data name="&gt;&gt;SizeContextTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn3.Name" xml:space="preserve">
+    <value>dataColumn3</value>
+  </data>
+  <data name="&gt;&gt;dataColumn3.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn4.Name" xml:space="preserve">
+    <value>dataColumn4</value>
+  </data>
+  <data name="&gt;&gt;dataColumn4.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ComboBoxDataSet.Name" xml:space="preserve">
+    <value>ComboBoxDataSet</value>
+  </data>
+  <data name="&gt;&gt;ComboBoxDataSet.Type" xml:space="preserve">
+    <value>System.Data.DataSet, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>LineFeatureStyleEditor</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineStyleEditor.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineStyleEditor.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineStyleEditor.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,180 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Windows.Forms;
+using Maestro.Editors.Common;
+
+namespace Maestro.Editors.LayerDefinition.Vector.StyleEditors
+{
+	/// <summary>
+	/// Summary description for LineStyleEditor.
+	/// </summary>
+	public class LineStyleEditor : System.Windows.Forms.UserControl
+	{
+        public ImageStylePicker fillCombo;
+        public Label lblColor;
+		private System.Windows.Forms.Label lblThickness;
+		private System.Windows.Forms.Label lblFill;
+		public System.Windows.Forms.CheckBox displayLine;
+        private System.Windows.Forms.Panel panel1;
+        private Label label1;
+        public ColorComboWithTransparency colorCombo;
+        public ComboBox thicknessCombo;
+
+		/// <summary> 
+		/// Required designer variable.
+		/// </summary>
+		private System.ComponentModel.Container components = null;
+
+		public LineStyleEditor()
+		{
+			// This call is required by the Windows.Forms Form Designer.
+			InitializeComponent();
+
+            fillCombo.Items.Clear();
+            fillCombo.Items.AddRange(FeaturePreviewRender.LineStyles);
+        }
+
+		/// <summary> 
+		/// Clean up any resources being used.
+		/// </summary>
+		protected override void Dispose( bool disposing )
+		{
+			if( disposing )
+			{
+				if(components != null)
+				{
+					components.Dispose();
+				}
+			}
+			base.Dispose( disposing );
+		}
+
+		#region Component Designer generated code
+		/// <summary> 
+		/// Required method for Designer support - do not modify 
+		/// the contents of this method with the code editor.
+		/// </summary>
+		private void InitializeComponent()
+		{
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LineStyleEditor));
+            this.fillCombo = new ImageStylePicker();
+            this.lblColor = new System.Windows.Forms.Label();
+            this.lblThickness = new System.Windows.Forms.Label();
+            this.lblFill = new System.Windows.Forms.Label();
+            this.displayLine = new System.Windows.Forms.CheckBox();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.thicknessCombo = new System.Windows.Forms.ComboBox();
+            this.colorCombo = new ColorComboWithTransparency();
+            this.label1 = new System.Windows.Forms.Label();
+            this.panel1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // fillCombo
+            // 
+            resources.ApplyResources(this.fillCombo, "fillCombo");
+            this.fillCombo.DisplayMember = "Name";
+            this.fillCombo.Name = "fillCombo";
+            this.fillCombo.TextWidth = 40;
+            this.fillCombo.ValueMember = "Name";
+            // 
+            // lblColor
+            // 
+            resources.ApplyResources(this.lblColor, "lblColor");
+            this.lblColor.Name = "lblColor";
+            // 
+            // lblThickness
+            // 
+            resources.ApplyResources(this.lblThickness, "lblThickness");
+            this.lblThickness.Name = "lblThickness";
+            // 
+            // lblFill
+            // 
+            resources.ApplyResources(this.lblFill, "lblFill");
+            this.lblFill.Name = "lblFill";
+            // 
+            // displayLine
+            // 
+            this.displayLine.Checked = true;
+            this.displayLine.CheckState = System.Windows.Forms.CheckState.Checked;
+            resources.ApplyResources(this.displayLine, "displayLine");
+            this.displayLine.Name = "displayLine";
+            this.displayLine.CheckedChanged += new System.EventHandler(this.displayLine_CheckedChanged);
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this.thicknessCombo);
+            this.panel1.Controls.Add(this.colorCombo);
+            this.panel1.Controls.Add(this.label1);
+            this.panel1.Controls.Add(this.fillCombo);
+            this.panel1.Controls.Add(this.lblColor);
+            this.panel1.Controls.Add(this.lblThickness);
+            this.panel1.Controls.Add(this.lblFill);
+            resources.ApplyResources(this.panel1, "panel1");
+            this.panel1.Name = "panel1";
+            // 
+            // thicknessCombo
+            // 
+            resources.ApplyResources(this.thicknessCombo, "thicknessCombo");
+            this.thicknessCombo.FormattingEnabled = true;
+            this.thicknessCombo.Items.AddRange(new object[] {
+            resources.GetString("thicknessCombo.Items")});
+            this.thicknessCombo.Name = "thicknessCombo";
+            // 
+            // colorCombo
+            // 
+            resources.ApplyResources(this.colorCombo, "colorCombo");
+            this.colorCombo.CurrentColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
+            this.colorCombo.Name = "colorCombo";
+            // 
+            // label1
+            // 
+            resources.ApplyResources(this.label1, "label1");
+            this.label1.Name = "label1";
+            // 
+            // LineStyleEditor
+            // 
+            this.Controls.Add(this.panel1);
+            this.Controls.Add(this.displayLine);
+            this.Name = "LineStyleEditor";
+            resources.ApplyResources(this, "$this");
+            this.Load += new System.EventHandler(this.LineStyleEditor_Load);
+            this.panel1.ResumeLayout(false);
+            this.panel1.PerformLayout();
+            this.ResumeLayout(false);
+
+		}
+		#endregion
+
+		private void LineStyleEditor_Load(object sender, System.EventArgs e)
+		{
+		}
+
+		private void displayLine_CheckedChanged(object sender, System.EventArgs e)
+		{
+            panel1.Enabled = displayLine.Checked;
+		}
+
+	}
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineStyleEditor.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineStyleEditor.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/LineStyleEditor.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,375 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="fillCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="fillCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>120, 0</value>
+  </data>
+  <data name="fillCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>312, 21</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="fillCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="&gt;&gt;fillCombo.Name" xml:space="preserve">
+    <value>fillCombo</value>
+  </data>
+  <data name="&gt;&gt;fillCombo.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.ImageStylePicker, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4437, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;fillCombo.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;fillCombo.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="lblColor.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="lblColor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 64</value>
+  </data>
+  <data name="lblColor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>31, 13</value>
+  </data>
+  <data name="lblColor.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="lblColor.Text" xml:space="preserve">
+    <value>Color</value>
+  </data>
+  <data name="&gt;&gt;lblColor.Name" xml:space="preserve">
+    <value>lblColor</value>
+  </data>
+  <data name="&gt;&gt;lblColor.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;lblColor.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;lblColor.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="lblThickness.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="lblThickness.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 32</value>
+  </data>
+  <data name="lblThickness.Size" type="System.Drawing.Size, System.Drawing">
+    <value>56, 13</value>
+  </data>
+  <data name="lblThickness.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="lblThickness.Text" xml:space="preserve">
+    <value>Thickness</value>
+  </data>
+  <data name="&gt;&gt;lblThickness.Name" xml:space="preserve">
+    <value>lblThickness</value>
+  </data>
+  <data name="&gt;&gt;lblThickness.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;lblThickness.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;lblThickness.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="lblFill.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="lblFill.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 8</value>
+  </data>
+  <data name="lblFill.Size" type="System.Drawing.Size, System.Drawing">
+    <value>51, 13</value>
+  </data>
+  <data name="lblFill.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="lblFill.Text" xml:space="preserve">
+    <value>Line style</value>
+  </data>
+  <data name="&gt;&gt;lblFill.Name" xml:space="preserve">
+    <value>lblFill</value>
+  </data>
+  <data name="&gt;&gt;lblFill.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;lblFill.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;lblFill.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="displayLine.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="displayLine.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
+    <value>System</value>
+  </data>
+  <data name="displayLine.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="displayLine.Size" type="System.Drawing.Size, System.Drawing">
+    <value>432, 16</value>
+  </data>
+  <data name="displayLine.TabIndex" type="System.Int32, mscorlib">
+    <value>14</value>
+  </data>
+  <data name="displayLine.Text" xml:space="preserve">
+    <value>Display edge</value>
+  </data>
+  <data name="&gt;&gt;displayLine.Name" xml:space="preserve">
+    <value>displayLine</value>
+  </data>
+  <data name="&gt;&gt;displayLine.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;displayLine.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;displayLine.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="thicknessCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="thicknessCombo.Items" xml:space="preserve">
+    <value>Expression...</value>
+  </data>
+  <data name="thicknessCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>120, 32</value>
+  </data>
+  <data name="thicknessCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>312, 21</value>
+  </data>
+  <data name="thicknessCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>15</value>
+  </data>
+  <data name="&gt;&gt;thicknessCombo.Name" xml:space="preserve">
+    <value>thicknessCombo</value>
+  </data>
+  <data name="&gt;&gt;thicknessCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;thicknessCombo.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;thicknessCombo.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="colorCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="colorCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>120, 64</value>
+  </data>
+  <data name="colorCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>312, 49</value>
+  </data>
+  <data name="colorCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>14</value>
+  </data>
+  <data name="&gt;&gt;colorCombo.Name" xml:space="preserve">
+    <value>colorCombo</value>
+  </data>
+  <data name="&gt;&gt;colorCombo.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.ColorComboWithTransparency, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4437, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;colorCombo.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;colorCombo.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="label1.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 96</value>
+  </data>
+  <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>72, 13</value>
+  </data>
+  <data name="label1.TabIndex" type="System.Int32, mscorlib">
+    <value>13</value>
+  </data>
+  <data name="label1.Text" xml:space="preserve">
+    <value>Transparency</value>
+  </data>
+  <data name="&gt;&gt;label1.Name" xml:space="preserve">
+    <value>label1</value>
+  </data>
+  <data name="&gt;&gt;label1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label1.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 16</value>
+  </data>
+  <data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>432, 120</value>
+  </data>
+  <data name="panel1.TabIndex" type="System.Int32, mscorlib">
+    <value>15</value>
+  </data>
+  <data name="&gt;&gt;panel1.Name" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;panel1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;panel1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>432, 136</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>LineStyleEditor</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/PointFeatureStyleEditor.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/PointFeatureStyleEditor.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/PointFeatureStyleEditor.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,1381 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Data;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using Maestro.Editors.Common;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.ObjectModels.FeatureSource;
+using System.Globalization;
+using OSGeo.MapGuide.ObjectModels;
+using OSGeo.MapGuide.MaestroAPI.ObjectModels;
+
+namespace Maestro.Editors.LayerDefinition.Vector.StyleEditors
+{
+	/// <summary>
+	/// Summary description for PointFeatureStyleEditor.
+	/// </summary>
+	public class PointFeatureStyleEditor : System.Windows.Forms.UserControl
+	{
+		private System.Windows.Forms.GroupBox groupBox1;
+		private System.Windows.Forms.Label label1;
+		private System.Windows.Forms.Label label2;
+		private System.Windows.Forms.Label label3;
+		private System.Windows.Forms.Label label4;
+		private System.Windows.Forms.Label label5;
+		private System.Windows.Forms.GroupBox groupBox2;
+		private System.Windows.Forms.GroupBox groupBox3;
+		private System.Windows.Forms.GroupBox groupBox4;
+		private System.Windows.Forms.PictureBox previewPicture;
+		private System.Data.DataSet ComboBoxDataSet;
+		private System.Data.DataTable SymbolMarkTable;
+		private System.Data.DataColumn dataColumn1;
+		private System.Data.DataColumn dataColumn2;
+		private System.Data.DataTable SizeContextTable;
+		private System.Data.DataColumn dataColumn3;
+		private System.Data.DataColumn dataColumn4;
+		private System.Data.DataTable UnitsTable;
+		private System.Data.DataColumn dataColumn5;
+		private System.Data.DataColumn dataColumn6;
+		private System.Data.DataTable RotationTable;
+		private System.Data.DataColumn dataColumn7;
+		private System.Data.DataColumn dataColumn8;
+		/// <summary>
+		/// Required designer variable.
+		/// </summary>
+		private System.ComponentModel.Container components = null;
+		private System.Windows.Forms.ComboBox HeigthText;
+		private System.Windows.Forms.ComboBox WidthText;
+		private System.Windows.Forms.ComboBox SizeUnits;
+		private System.Windows.Forms.ComboBox SizeContext;
+		private System.Windows.Forms.ComboBox Symbol;
+		private LineStyleEditor lineStyleEditor;
+
+		private PointSymbolization2DType m_item;
+        private MarkSymbolType m_lastMark = null;
+        private FontSymbolType m_lastFont = null;
+
+		private bool m_inUpdate = false;
+
+		private FillType previousFill = null;
+        private CheckBox DisplayPoints;
+		private StrokeType previousEdge = null;
+		private GroupBox groupBoxFont;
+		private ComboBox fontCombo;
+		private Label label10;
+		private ComboBox comboBoxCharacter;
+		private GroupBox groupBoxSymbolLocation;
+		private Button button1;
+		private TextBox ReferenceY;
+		private Label label8;
+		private TextBox ReferenceX;
+		private Label label7;
+		private Label label6;
+		private CheckBox MaintainAspectRatio;
+		private ComboBox RotationBox;
+		private Label label9;
+        private FillStyleEditor fillStyleEditor;
+		private Label lblForeground;
+        private Panel panel1;
+        private ToolStrip toolStrip1;
+        private ToolStripButton FontBoldButton;
+        private ToolStripButton FontItalicButton;
+        private ColorComboWithTransparency colorFontForeground;
+        private Label label11;
+        private ToolStripButton FontUnderlineButton;
+
+        public event EventHandler Changed;
+
+        private IEditorService m_editor;
+        private FeatureSourceDescription.FeatureSourceSchema m_schema;
+        private string m_featureSource;
+        private string m_providername;
+
+        public PointFeatureStyleEditor(IEditorService editor, FeatureSourceDescription.FeatureSourceSchema schema, string featureSource)
+            : this()
+        {
+            m_editor = editor;
+            m_schema = schema;
+
+            var fs = (FeatureSourceType)editor.ResourceService.GetResource(featureSource);
+
+            m_providername = fs.Provider;
+            m_featureSource = featureSource;
+        }
+
+		private PointFeatureStyleEditor()
+		{
+			//
+			// Required for Windows Form Designer support
+			//
+			InitializeComponent();
+            using(System.IO.StringReader sr = new System.IO.StringReader(Properties.Resources.GeometryStyleComboDataset))
+				ComboBoxDataSet.ReadXml(sr);
+
+			fontCombo.Items.Clear();
+            foreach (FontFamily f in new System.Drawing.Text.InstalledFontCollection().Families)
+                fontCombo.Items.Add(f.Name);
+
+			colorFontForeground.CurrentColorChanged += new EventHandler(colourFontForeground_CurrentColorChanged);
+
+			fillStyleEditor.displayFill.CheckedChanged += new EventHandler(displayFill_CheckedChanged);
+			fillStyleEditor.fillCombo.SelectedIndexChanged += new EventHandler(fillCombo_SelectedIndexChanged);
+			fillStyleEditor.foregroundColor.CurrentColorChanged += new EventHandler(foregroundColor_CurrentColorChanged);
+			fillStyleEditor.backgroundColor.CurrentColorChanged +=new EventHandler(backgroundColor_CurrentColorChanged);
+
+			lineStyleEditor.displayLine.CheckedChanged +=new EventHandler(displayLine_CheckedChanged);
+			lineStyleEditor.thicknessCombo.SelectedIndexChanged += new EventHandler(thicknessCombo_SelectedIndexChanged);
+            lineStyleEditor.thicknessCombo.TextChanged += new EventHandler(thicknessCombo_TextChanged);
+			lineStyleEditor.colorCombo.CurrentColorChanged +=new EventHandler(colorCombo_CurrentColorChanged);
+			lineStyleEditor.fillCombo.SelectedIndexChanged +=new EventHandler(fillCombo_Line_SelectedIndexChanged);
+
+			m_item = new PointSymbolization2DType();
+			m_item.Item = new MarkSymbolType();
+		}
+
+		private void setUIForMarkSymbol(bool enabled)
+		{
+            groupBoxSymbolLocation.Enabled = enabled;
+            groupBox2.Enabled = enabled;
+            groupBox3.Enabled = enabled;
+
+            groupBoxFont.Enabled = !enabled;
+		}
+
+		private void UpdateDisplay()
+		{
+			if (m_inUpdate)
+				return;
+
+			try
+			{
+				m_inUpdate = true;
+
+                if (m_item == null)
+                {
+                    DisplayPoints.Checked = false;
+                    return;
+                }
+
+                DisplayPoints.Checked = true;
+
+				if (m_item.Item == null)
+					m_item.Item = new MarkSymbolType();
+
+				// shared values
+				WidthText.Text = m_item.Item.SizeX;
+				HeigthText.Text = m_item.Item.SizeY;
+                RotationBox.SelectedIndex = -1;
+				RotationBox.Text = m_item.Item.Rotation;
+
+				SizeUnits.SelectedValue = m_item.Item.Unit;
+				SizeContext.SelectedValue = m_item.Item.SizeContext.ToString();
+
+				// specifics
+				if (m_item.Item.GetType() == typeof(MarkSymbolType))
+				{
+					MaintainAspectRatio.Checked = m_item.Item.MaintainAspect;
+					double d;
+					if (double.TryParse(m_item.Item.InsertionPointX, NumberStyles.Float, CultureInfo.InvariantCulture, out d))
+						ReferenceX.Text = d.ToString(System.Threading.Thread.CurrentThread.CurrentUICulture);
+					else
+						ReferenceX.Text = m_item.Item.InsertionPointX;
+
+                    //if (double.TryParse(m_item.Item.InsertionPointY, NumberStyles.Float, CultureInfo.InvariantCulture, out d))
+                    //    ReferenceY.Text = d.ToString(System.Threading.Thread.CurrentThread.CurrentUICulture);
+                    //else
+                    //    ReferenceY.Text = m_item.Item.InsertionPointY;
+                    ReferenceY.Text = m_item.Item.InsertionPointY.ToString(System.Threading.Thread.CurrentThread.CurrentUICulture);
+
+					MarkSymbolType t = (MarkSymbolType)m_item.Item;
+					Symbol.SelectedValue = t.Shape.ToString();
+
+					fillStyleEditor.displayFill.Checked = t.Fill != null;
+					if (t.Fill != null)
+					{
+                        fillStyleEditor.foregroundColor.CurrentColor = Utility.ParseHTMLColor(t.Fill.ForegroundColor);
+                        fillStyleEditor.backgroundColor.CurrentColor = Utility.ParseHTMLColor(t.Fill.BackgroundColor);
+						fillStyleEditor.fillCombo.SelectedValue = t.Fill.FillPattern;
+						if (fillStyleEditor.fillCombo.SelectedItem == null && fillStyleEditor.fillCombo.Items.Count > 0)
+							fillStyleEditor.fillCombo.SelectedIndex = fillStyleEditor.fillCombo.FindString(t.Fill.FillPattern);
+					}
+
+					lineStyleEditor.displayLine.Checked = t.Edge != null;
+					if (t.Edge != null)
+					{
+						lineStyleEditor.fillCombo.SelectedValue = t.Edge.LineStyle;
+						if (lineStyleEditor.fillCombo.SelectedItem == null && lineStyleEditor.fillCombo.Items.Count > 0)
+							lineStyleEditor.fillCombo.SelectedIndex = lineStyleEditor.fillCombo.FindString(t.Edge.LineStyle);
+
+                        lineStyleEditor.colorCombo.CurrentColor = Utility.ParseHTMLColor(t.Edge.Color);
+						lineStyleEditor.thicknessCombo.Text = t.Edge.Thickness;
+					}
+
+					setUIForMarkSymbol(true);
+				}
+				else if (m_item.Item.GetType() == typeof(FontSymbolType))
+				{
+					FontSymbolType f = (FontSymbolType)m_item.Item;
+
+					// TODO: Dislike this hard coding, but with association from 'Shape' the 'Font...' string cannot be found or set from the Symbol combobox
+					Symbol.SelectedIndex = 6;
+
+                    fontCombo.SelectedIndex = fontCombo.FindString(f.FontName);
+                    if (string.Compare(fontCombo.Text, f.FontName, true) == 0)
+                        fontCombo.Text = f.FontName;
+
+                    comboBoxCharacter.SelectedIndex = comboBoxCharacter.FindString(f.Character);
+                    if (comboBoxCharacter.Text != f.Character)
+                        comboBoxCharacter.Text = f.Character;
+
+                    FontBoldButton.Checked = f.Bold && f.BoldSpecified;
+                    FontItalicButton.Checked = f.Italic && f.ItalicSpecified;
+                    FontUnderlineButton.Checked = f.Underlined && f.UnderlinedSpecified;
+
+                    if (string.IsNullOrEmpty(f.ForegroundColor))
+                        colorFontForeground.CurrentColor = Color.Black;
+                    else
+                        colorFontForeground.CurrentColor = Utility.ParseHTMLColor(f.ForegroundColor);
+
+					setUIForMarkSymbol(false);
+				}
+				else
+					//TODO: Fix this
+					MessageBox.Show(this, Properties.Resources.SymbolTypeNotSupported, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
+
+				previewPicture.Refresh();
+			} 
+			finally
+			{
+				m_inUpdate = false;
+			}
+		}
+
+		/// <summary>
+		/// Clean up any resources being used.
+		/// </summary>
+		protected override void Dispose( bool disposing )
+		{
+			if( disposing )
+			{
+				if(components != null)
+				{
+					components.Dispose();
+				}
+			}
+			base.Dispose( disposing );
+		}
+
+
+		#region Windows Form Designer generated code
+		/// <summary>
+		/// Required method for Designer support - do not modify
+		/// the contents of this method with the code editor.
+		/// </summary>
+		private void InitializeComponent()
+		{
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PointFeatureStyleEditor));
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.RotationBox = new System.Windows.Forms.ComboBox();
+            this.RotationTable = new System.Data.DataTable();
+            this.dataColumn7 = new System.Data.DataColumn();
+            this.dataColumn8 = new System.Data.DataColumn();
+            this.label9 = new System.Windows.Forms.Label();
+            this.HeigthText = new System.Windows.Forms.ComboBox();
+            this.WidthText = new System.Windows.Forms.ComboBox();
+            this.SizeUnits = new System.Windows.Forms.ComboBox();
+            this.UnitsTable = new System.Data.DataTable();
+            this.dataColumn5 = new System.Data.DataColumn();
+            this.dataColumn6 = new System.Data.DataColumn();
+            this.SizeContext = new System.Windows.Forms.ComboBox();
+            this.SizeContextTable = new System.Data.DataTable();
+            this.dataColumn3 = new System.Data.DataColumn();
+            this.dataColumn4 = new System.Data.DataColumn();
+            this.Symbol = new System.Windows.Forms.ComboBox();
+            this.SymbolMarkTable = new System.Data.DataTable();
+            this.dataColumn1 = new System.Data.DataColumn();
+            this.dataColumn2 = new System.Data.DataColumn();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label1 = new System.Windows.Forms.Label();
+            this.groupBox2 = new System.Windows.Forms.GroupBox();
+            this.fillStyleEditor = new FillStyleEditor();
+            this.groupBox3 = new System.Windows.Forms.GroupBox();
+            this.lineStyleEditor = new LineStyleEditor();
+            this.groupBox4 = new System.Windows.Forms.GroupBox();
+            this.previewPicture = new System.Windows.Forms.PictureBox();
+            this.ComboBoxDataSet = new System.Data.DataSet();
+            this.DisplayPoints = new System.Windows.Forms.CheckBox();
+            this.groupBoxFont = new System.Windows.Forms.GroupBox();
+            this.label11 = new System.Windows.Forms.Label();
+            this.colorFontForeground = new ColorComboWithTransparency();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.FontBoldButton = new System.Windows.Forms.ToolStripButton();
+            this.FontItalicButton = new System.Windows.Forms.ToolStripButton();
+            this.FontUnderlineButton = new System.Windows.Forms.ToolStripButton();
+            this.lblForeground = new System.Windows.Forms.Label();
+            this.comboBoxCharacter = new System.Windows.Forms.ComboBox();
+            this.fontCombo = new System.Windows.Forms.ComboBox();
+            this.label10 = new System.Windows.Forms.Label();
+            this.groupBoxSymbolLocation = new System.Windows.Forms.GroupBox();
+            this.button1 = new System.Windows.Forms.Button();
+            this.ReferenceY = new System.Windows.Forms.TextBox();
+            this.label8 = new System.Windows.Forms.Label();
+            this.ReferenceX = new System.Windows.Forms.TextBox();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.MaintainAspectRatio = new System.Windows.Forms.CheckBox();
+            this.groupBox1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.RotationTable)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.UnitsTable)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.SizeContextTable)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.SymbolMarkTable)).BeginInit();
+            this.groupBox2.SuspendLayout();
+            this.groupBox3.SuspendLayout();
+            this.groupBox4.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.previewPicture)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboBoxDataSet)).BeginInit();
+            this.groupBoxFont.SuspendLayout();
+            this.panel1.SuspendLayout();
+            this.toolStrip1.SuspendLayout();
+            this.groupBoxSymbolLocation.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // groupBox1
+            // 
+            resources.ApplyResources(this.groupBox1, "groupBox1");
+            this.groupBox1.Controls.Add(this.RotationBox);
+            this.groupBox1.Controls.Add(this.label9);
+            this.groupBox1.Controls.Add(this.HeigthText);
+            this.groupBox1.Controls.Add(this.WidthText);
+            this.groupBox1.Controls.Add(this.SizeUnits);
+            this.groupBox1.Controls.Add(this.SizeContext);
+            this.groupBox1.Controls.Add(this.Symbol);
+            this.groupBox1.Controls.Add(this.label5);
+            this.groupBox1.Controls.Add(this.label4);
+            this.groupBox1.Controls.Add(this.label3);
+            this.groupBox1.Controls.Add(this.label2);
+            this.groupBox1.Controls.Add(this.label1);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.TabStop = false;
+            // 
+            // RotationBox
+            // 
+            resources.ApplyResources(this.RotationBox, "RotationBox");
+            this.RotationBox.DataSource = this.RotationTable;
+            this.RotationBox.DisplayMember = "Display";
+            this.RotationBox.Name = "RotationBox";
+            this.RotationBox.ValueMember = "Value";
+            this.RotationBox.SelectedIndexChanged += new System.EventHandler(this.RotationBox_SelectedIndexChanged);
+            this.RotationBox.TextChanged += new System.EventHandler(this.RotationBox_TextChanged);
+            // 
+            // RotationTable
+            // 
+            this.RotationTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn7,
+            this.dataColumn8});
+            this.RotationTable.TableName = "Rotation";
+            // 
+            // dataColumn7
+            // 
+            this.dataColumn7.Caption = "Display";
+            this.dataColumn7.ColumnName = "Display";
+            // 
+            // dataColumn8
+            // 
+            this.dataColumn8.Caption = "Value";
+            this.dataColumn8.ColumnName = "Value";
+            // 
+            // label9
+            // 
+            resources.ApplyResources(this.label9, "label9");
+            this.label9.Name = "label9";
+            // 
+            // HeigthText
+            // 
+            resources.ApplyResources(this.HeigthText, "HeigthText");
+            this.HeigthText.Items.AddRange(new object[] {
+            resources.GetString("HeigthText.Items")});
+            this.HeigthText.Name = "HeigthText";
+            this.HeigthText.SelectedIndexChanged += new System.EventHandler(this.HeigthText_SelectedIndexChanged);
+            this.HeigthText.TextChanged += new System.EventHandler(this.HeigthText_TextChanged);
+            // 
+            // WidthText
+            // 
+            resources.ApplyResources(this.WidthText, "WidthText");
+            this.WidthText.Items.AddRange(new object[] {
+            resources.GetString("WidthText.Items")});
+            this.WidthText.Name = "WidthText";
+            this.WidthText.SelectedIndexChanged += new System.EventHandler(this.WidthText_SelectedIndexChanged);
+            this.WidthText.TextChanged += new System.EventHandler(this.WidthText_TextChanged);
+            // 
+            // SizeUnits
+            // 
+            resources.ApplyResources(this.SizeUnits, "SizeUnits");
+            this.SizeUnits.DataSource = this.UnitsTable;
+            this.SizeUnits.DisplayMember = "Display";
+            this.SizeUnits.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.SizeUnits.Name = "SizeUnits";
+            this.SizeUnits.ValueMember = "Value";
+            this.SizeUnits.SelectedIndexChanged += new System.EventHandler(this.SizeUnits_SelectedIndexChanged);
+            // 
+            // UnitsTable
+            // 
+            this.UnitsTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn5,
+            this.dataColumn6});
+            this.UnitsTable.TableName = "Units";
+            // 
+            // dataColumn5
+            // 
+            this.dataColumn5.Caption = "Display";
+            this.dataColumn5.ColumnName = "Display";
+            // 
+            // dataColumn6
+            // 
+            this.dataColumn6.Caption = "Value";
+            this.dataColumn6.ColumnName = "Value";
+            // 
+            // SizeContext
+            // 
+            resources.ApplyResources(this.SizeContext, "SizeContext");
+            this.SizeContext.DataSource = this.SizeContextTable;
+            this.SizeContext.DisplayMember = "Display";
+            this.SizeContext.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.SizeContext.Name = "SizeContext";
+            this.SizeContext.ValueMember = "Value";
+            this.SizeContext.SelectedIndexChanged += new System.EventHandler(this.SizeContext_SelectedIndexChanged);
+            // 
+            // SizeContextTable
+            // 
+            this.SizeContextTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn3,
+            this.dataColumn4});
+            this.SizeContextTable.TableName = "SizeContext";
+            // 
+            // dataColumn3
+            // 
+            this.dataColumn3.Caption = "Display";
+            this.dataColumn3.ColumnName = "Display";
+            // 
+            // dataColumn4
+            // 
+            this.dataColumn4.Caption = "Value";
+            this.dataColumn4.ColumnName = "Value";
+            // 
+            // Symbol
+            // 
+            resources.ApplyResources(this.Symbol, "Symbol");
+            this.Symbol.DataSource = this.SymbolMarkTable;
+            this.Symbol.DisplayMember = "Display";
+            this.Symbol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.Symbol.Name = "Symbol";
+            this.Symbol.ValueMember = "Value";
+            this.Symbol.SelectedIndexChanged += new System.EventHandler(this.Symbol_SelectedIndexChanged);
+            // 
+            // SymbolMarkTable
+            // 
+            this.SymbolMarkTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.dataColumn1,
+            this.dataColumn2});
+            this.SymbolMarkTable.TableName = "SymbolMark";
+            // 
+            // dataColumn1
+            // 
+            this.dataColumn1.Caption = "Display";
+            this.dataColumn1.ColumnName = "Display";
+            // 
+            // dataColumn2
+            // 
+            this.dataColumn2.Caption = "Value";
+            this.dataColumn2.ColumnName = "Value";
+            // 
+            // label5
+            // 
+            resources.ApplyResources(this.label5, "label5");
+            this.label5.Name = "label5";
+            // 
+            // label4
+            // 
+            resources.ApplyResources(this.label4, "label4");
+            this.label4.Name = "label4";
+            // 
+            // label3
+            // 
+            resources.ApplyResources(this.label3, "label3");
+            this.label3.Name = "label3";
+            // 
+            // label2
+            // 
+            resources.ApplyResources(this.label2, "label2");
+            this.label2.Name = "label2";
+            // 
+            // label1
+            // 
+            resources.ApplyResources(this.label1, "label1");
+            this.label1.Name = "label1";
+            // 
+            // groupBox2
+            // 
+            resources.ApplyResources(this.groupBox2, "groupBox2");
+            this.groupBox2.Controls.Add(this.fillStyleEditor);
+            this.groupBox2.Name = "groupBox2";
+            this.groupBox2.TabStop = false;
+            // 
+            // fillStyleEditor
+            // 
+            resources.ApplyResources(this.fillStyleEditor, "fillStyleEditor");
+            this.fillStyleEditor.Name = "fillStyleEditor";
+            // 
+            // groupBox3
+            // 
+            resources.ApplyResources(this.groupBox3, "groupBox3");
+            this.groupBox3.Controls.Add(this.lineStyleEditor);
+            this.groupBox3.Name = "groupBox3";
+            this.groupBox3.TabStop = false;
+            // 
+            // lineStyleEditor
+            // 
+            resources.ApplyResources(this.lineStyleEditor, "lineStyleEditor");
+            this.lineStyleEditor.Name = "lineStyleEditor";
+            // 
+            // groupBox4
+            // 
+            resources.ApplyResources(this.groupBox4, "groupBox4");
+            this.groupBox4.Controls.Add(this.previewPicture);
+            this.groupBox4.Name = "groupBox4";
+            this.groupBox4.TabStop = false;
+            // 
+            // previewPicture
+            // 
+            resources.ApplyResources(this.previewPicture, "previewPicture");
+            this.previewPicture.BackColor = System.Drawing.Color.White;
+            this.previewPicture.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.previewPicture.Name = "previewPicture";
+            this.previewPicture.TabStop = false;
+            this.previewPicture.Paint += new System.Windows.Forms.PaintEventHandler(this.previewPicture_Paint);
+            // 
+            // ComboBoxDataSet
+            // 
+            this.ComboBoxDataSet.DataSetName = "ComboBoxDataSet";
+            this.ComboBoxDataSet.Locale = new System.Globalization.CultureInfo("da-DK");
+            this.ComboBoxDataSet.Tables.AddRange(new System.Data.DataTable[] {
+            this.SymbolMarkTable,
+            this.SizeContextTable,
+            this.UnitsTable,
+            this.RotationTable});
+            // 
+            // DisplayPoints
+            // 
+            resources.ApplyResources(this.DisplayPoints, "DisplayPoints");
+            this.DisplayPoints.Checked = true;
+            this.DisplayPoints.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.DisplayPoints.Name = "DisplayPoints";
+            this.DisplayPoints.UseVisualStyleBackColor = true;
+            this.DisplayPoints.CheckedChanged += new System.EventHandler(this.DisplayPoints_CheckedChanged);
+            // 
+            // groupBoxFont
+            // 
+            resources.ApplyResources(this.groupBoxFont, "groupBoxFont");
+            this.groupBoxFont.Controls.Add(this.label11);
+            this.groupBoxFont.Controls.Add(this.colorFontForeground);
+            this.groupBoxFont.Controls.Add(this.panel1);
+            this.groupBoxFont.Controls.Add(this.lblForeground);
+            this.groupBoxFont.Controls.Add(this.comboBoxCharacter);
+            this.groupBoxFont.Controls.Add(this.fontCombo);
+            this.groupBoxFont.Controls.Add(this.label10);
+            this.groupBoxFont.Name = "groupBoxFont";
+            this.groupBoxFont.TabStop = false;
+            // 
+            // label11
+            // 
+            resources.ApplyResources(this.label11, "label11");
+            this.label11.Name = "label11";
+            // 
+            // colorFontForeground
+            // 
+            resources.ApplyResources(this.colorFontForeground, "colorFontForeground");
+            this.colorFontForeground.CurrentColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
+            this.colorFontForeground.Name = "colorFontForeground";
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this.toolStrip1);
+            resources.ApplyResources(this.panel1, "panel1");
+            this.panel1.Name = "panel1";
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.FontBoldButton,
+            this.FontItalicButton,
+            this.FontUnderlineButton});
+            resources.ApplyResources(this.toolStrip1, "toolStrip1");
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
+            // 
+            // FontBoldButton
+            // 
+            this.FontBoldButton.CheckOnClick = true;
+            this.FontBoldButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+            resources.ApplyResources(this.FontBoldButton, "FontBoldButton");
+            this.FontBoldButton.Name = "FontBoldButton";
+            this.FontBoldButton.Click += new System.EventHandler(this.FontBoldButton_Click);
+            // 
+            // FontItalicButton
+            // 
+            this.FontItalicButton.CheckOnClick = true;
+            this.FontItalicButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+            resources.ApplyResources(this.FontItalicButton, "FontItalicButton");
+            this.FontItalicButton.Name = "FontItalicButton";
+            this.FontItalicButton.Click += new System.EventHandler(this.FontItalicButton_Click);
+            // 
+            // FontUnderlineButton
+            // 
+            this.FontUnderlineButton.CheckOnClick = true;
+            this.FontUnderlineButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+            resources.ApplyResources(this.FontUnderlineButton, "FontUnderlineButton");
+            this.FontUnderlineButton.Name = "FontUnderlineButton";
+            this.FontUnderlineButton.Click += new System.EventHandler(this.FontUnderlineButton_Click);
+            // 
+            // lblForeground
+            // 
+            resources.ApplyResources(this.lblForeground, "lblForeground");
+            this.lblForeground.Name = "lblForeground";
+            // 
+            // comboBoxCharacter
+            // 
+            resources.ApplyResources(this.comboBoxCharacter, "comboBoxCharacter");
+            this.comboBoxCharacter.DisplayMember = "Display";
+            this.comboBoxCharacter.Name = "comboBoxCharacter";
+            this.comboBoxCharacter.ValueMember = "Value";
+            this.comboBoxCharacter.SelectedIndexChanged += new System.EventHandler(this.comboBoxCharacter_SelectedIndexChanged);
+            this.comboBoxCharacter.TextChanged += new System.EventHandler(this.comboBoxCharacter_TextChanged);
+            // 
+            // fontCombo
+            // 
+            resources.ApplyResources(this.fontCombo, "fontCombo");
+            this.fontCombo.DisplayMember = "Display";
+            this.fontCombo.Name = "fontCombo";
+            this.fontCombo.ValueMember = "Value";
+            this.fontCombo.SelectedIndexChanged += new System.EventHandler(this.fontCombo_SelectedIndexChanged);
+            // 
+            // label10
+            // 
+            resources.ApplyResources(this.label10, "label10");
+            this.label10.Name = "label10";
+            // 
+            // groupBoxSymbolLocation
+            // 
+            resources.ApplyResources(this.groupBoxSymbolLocation, "groupBoxSymbolLocation");
+            this.groupBoxSymbolLocation.Controls.Add(this.button1);
+            this.groupBoxSymbolLocation.Controls.Add(this.ReferenceY);
+            this.groupBoxSymbolLocation.Controls.Add(this.label8);
+            this.groupBoxSymbolLocation.Controls.Add(this.ReferenceX);
+            this.groupBoxSymbolLocation.Controls.Add(this.label7);
+            this.groupBoxSymbolLocation.Controls.Add(this.label6);
+            this.groupBoxSymbolLocation.Controls.Add(this.MaintainAspectRatio);
+            this.groupBoxSymbolLocation.Name = "groupBoxSymbolLocation";
+            this.groupBoxSymbolLocation.TabStop = false;
+            // 
+            // button1
+            // 
+            resources.ApplyResources(this.button1, "button1");
+            this.button1.Name = "button1";
+            // 
+            // ReferenceY
+            // 
+            resources.ApplyResources(this.ReferenceY, "ReferenceY");
+            this.ReferenceY.Name = "ReferenceY";
+            // 
+            // label8
+            // 
+            resources.ApplyResources(this.label8, "label8");
+            this.label8.Name = "label8";
+            // 
+            // ReferenceX
+            // 
+            resources.ApplyResources(this.ReferenceX, "ReferenceX");
+            this.ReferenceX.Name = "ReferenceX";
+            // 
+            // label7
+            // 
+            resources.ApplyResources(this.label7, "label7");
+            this.label7.Name = "label7";
+            // 
+            // label6
+            // 
+            resources.ApplyResources(this.label6, "label6");
+            this.label6.Name = "label6";
+            // 
+            // MaintainAspectRatio
+            // 
+            resources.ApplyResources(this.MaintainAspectRatio, "MaintainAspectRatio");
+            this.MaintainAspectRatio.Name = "MaintainAspectRatio";
+            // 
+            // PointFeatureStyleEditor
+            // 
+            resources.ApplyResources(this, "$this");
+            this.Controls.Add(this.groupBoxSymbolLocation);
+            this.Controls.Add(this.groupBoxFont);
+            this.Controls.Add(this.DisplayPoints);
+            this.Controls.Add(this.groupBox4);
+            this.Controls.Add(this.groupBox2);
+            this.Controls.Add(this.groupBox1);
+            this.Controls.Add(this.groupBox3);
+            this.Name = "PointFeatureStyleEditor";
+            this.Load += new System.EventHandler(this.PointFeatureStyleEditor_Load);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.RotationTable)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.UnitsTable)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.SizeContextTable)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.SymbolMarkTable)).EndInit();
+            this.groupBox2.ResumeLayout(false);
+            this.groupBox3.ResumeLayout(false);
+            this.groupBox4.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.previewPicture)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboBoxDataSet)).EndInit();
+            this.groupBoxFont.ResumeLayout(false);
+            this.groupBoxFont.PerformLayout();
+            this.panel1.ResumeLayout(false);
+            this.panel1.PerformLayout();
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.groupBoxSymbolLocation.ResumeLayout(false);
+            this.groupBoxSymbolLocation.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+		}
+		#endregion
+
+		private void PointFeatureStyleEditor_Load(object sender, System.EventArgs e)
+		{
+			UpdateDisplay();
+		}
+
+		private void previewPicture_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
+		{
+            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
+			if (m_item != null && m_item.Item as MarkSymbolType != null)
+				FeaturePreviewRender.RenderPreviewPoint(e.Graphics, new Rectangle(1, 1, previewPicture.Width - 2, previewPicture.Height - 2), (MarkSymbolType)m_item.Item);
+			else if (m_item != null && m_item.Item as FontSymbolType != null)
+				FeaturePreviewRender.RenderPreviewFontSymbol(e.Graphics, new Rectangle(1, 1, previewPicture.Width - 2, previewPicture.Height - 2), (FontSymbolType)m_item.Item);
+			else
+                FeaturePreviewRender.RenderPreviewPoint(e.Graphics, new Rectangle(1, 1, previewPicture.Width - 2, previewPicture.Height - 2), null);
+		}
+
+		private void Symbol_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+            bool isSymbol = false;
+            ShapeType selectedShape = ShapeType.Circle;
+
+			// see if need to change symbol type
+            foreach (string s in Enum.GetNames(typeof(ShapeType)))
+                if (string.Compare(s, (string)Symbol.SelectedValue, true) == 0)
+                {
+                    selectedShape = (ShapeType)Enum.Parse(typeof(ShapeType), s);
+                    isSymbol = true;
+                    break;
+                }
+
+            if (m_item.Item is MarkSymbolType)
+                m_lastMark = (MarkSymbolType)m_item.Item;
+            else if (m_item.Item is FontSymbolType)
+                m_lastFont = (FontSymbolType)m_item.Item;
+
+            if (isSymbol)
+            {
+                bool update = m_item.Item != m_lastMark;
+
+                if (m_lastMark == null)
+                    m_lastMark = new MarkSymbolType();
+
+                m_lastMark.Shape = selectedShape;
+                m_item.Item = m_lastMark;
+                
+                setUIForMarkSymbol(true);
+                if (update)
+                    UpdateDisplay();
+            }
+			else if (Symbol.SelectedIndex == 6)
+			{
+			    // user wants to change away FROM a valid 'Mark' symbol type
+			    // if ("Font..." == Symbol.SelectedText)
+
+                bool update = m_item.Item != m_lastFont;
+
+                if (m_lastFont == null)
+                {
+                    m_lastFont = new FontSymbolType();
+                    m_lastFont.SizeContext = SizeContextType.DeviceUnits;
+                    m_lastFont.Rotation = "0";
+                    m_lastFont.SizeX = "10";
+                    m_lastFont.SizeY = "10";
+                    m_lastFont.Unit = LengthUnitType.Points;
+                }
+
+                m_item.Item = m_lastFont;
+                setUIForMarkSymbol(false);
+                if (update)
+                    UpdateDisplay();
+            }
+			else
+			{
+				MessageBox.Show(this, Properties.Resources.SymbolTypeNotSupported, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
+				return;
+			}
+
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void SizeContext_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+            if (m_item.Item.GetType() == typeof(MarkSymbolType))
+                ((MarkSymbolType)m_item.Item).SizeContext = (SizeContextType)Enum.Parse((typeof(SizeContextType)), (string)SizeContext.SelectedValue);
+            else if (m_item.Item.GetType() == typeof(FontSymbolType))
+                ((FontSymbolType)m_item.Item).SizeContext = (SizeContextType)Enum.Parse((typeof(SizeContextType)), (string)SizeContext.SelectedValue);
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void SizeUnits_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+			if (m_item.Item.GetType() == typeof(MarkSymbolType))
+				((MarkSymbolType)m_item.Item).Unit = (LengthUnitType)Enum.Parse(typeof(LengthUnitType), (string)SizeUnits.SelectedValue);
+			else if (m_item.Item.GetType() == typeof(FontSymbolType))
+				((FontSymbolType)m_item.Item).Unit = (LengthUnitType)Enum.Parse(typeof(LengthUnitType), (string)SizeUnits.SelectedValue);
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+        public delegate void UpdateComboTextFromSelectChangedDelegate(ComboBox owner, string text, bool userChange);
+
+        private void UpdateComboTextFromSelectChanged(ComboBox owner, string text, bool userChange)
+        {
+            try
+            {
+                if (!userChange)
+                    m_inUpdate = true;
+                owner.SelectedIndex = -1;
+                
+                //HACK: Odd bug, don't remove
+                if (owner.SelectedIndex != -1)
+                    owner.SelectedIndex = -1;
+
+                owner.Text = text;
+            }
+            finally
+            {
+                if (!userChange)
+                    m_inUpdate = false;
+            }
+        }
+
+		private void WidthText_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+            if (WidthText.SelectedIndex == WidthText.Items.Count - 1)
+            {
+                string current = null;
+                if (m_item.Item.GetType() == typeof(MarkSymbolType))
+                    current = ((MarkSymbolType)m_item.Item).SizeX;
+                else if (m_item.Item.GetType() == typeof(FontSymbolType))
+                    current = ((FontSymbolType)m_item.Item).SizeX;
+
+                string expr = null;
+                if (current != null)
+                {
+                    expr = m_editor.EditExpression(current, m_schema, m_providername, m_featureSource);
+                    if (!string.IsNullOrEmpty(expr))
+                        current = expr;
+                }
+
+                //This is required as we cannot update the text from within the SelectedIndexChanged event :(
+                BeginInvoke(new UpdateComboTextFromSelectChangedDelegate(UpdateComboTextFromSelectChanged), WidthText, current, expr != null);
+            }
+		}
+
+		private void HeigthText_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+            if (HeigthText.SelectedIndex == HeigthText.Items.Count - 1)
+            {
+                string current = null;
+                if (m_item.Item.GetType() == typeof(MarkSymbolType))
+                    current = ((MarkSymbolType)m_item.Item).SizeY;
+                else if (m_item.Item.GetType() == typeof(FontSymbolType))
+                    current = ((FontSymbolType)m_item.Item).SizeY;
+
+                string expr = null;
+                if (current != null)
+                {
+                    expr = m_editor.EditExpression(current, m_schema, m_providername, m_featureSource);
+                    if (!string.IsNullOrEmpty(expr))
+                        current = expr;
+                }
+
+                //This is required as we cannot update the text from within the SelectedIndexChanged event :(
+                BeginInvoke(new UpdateComboTextFromSelectChangedDelegate(UpdateComboTextFromSelectChanged), HeigthText, current, expr != null);
+            }
+		}
+
+		private void ReferenceX_TextChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+            if (m_item.Item.GetType() == typeof(MarkSymbolType))
+            {
+                double d;
+                if (ReferenceX.Text.Trim().Length == 0)
+                    ((MarkSymbolType)m_item.Item).InsertionPointY = 0.5;
+                else if (double.TryParse(ReferenceX.Text, System.Globalization.NumberStyles.Float, System.Threading.Thread.CurrentThread.CurrentUICulture, out d) || double.TryParse(ReferenceX.Text, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out d))
+                    ((MarkSymbolType)m_item.Item).InsertionPointX = Math.Min(Math.Max(0.0, d), 1.0).ToString(System.Globalization.CultureInfo.InvariantCulture);
+                else
+                    ((MarkSymbolType)m_item.Item).InsertionPointX = ReferenceX.Text;
+            }
+			previewPicture.Refresh();		
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void ReferenceY_TextChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+            if (m_item.Item.GetType() == typeof(MarkSymbolType))
+            {
+                double d;
+                if (double.TryParse(ReferenceY.Text, System.Globalization.NumberStyles.Float, System.Threading.Thread.CurrentThread.CurrentUICulture, out d) || double.TryParse(ReferenceY.Text, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out d))
+                    ((MarkSymbolType)m_item.Item).InsertionPointY = Math.Min(Math.Max(0.0, d), 1.0);
+                else
+                    ((MarkSymbolType)m_item.Item).InsertionPointY = 0.5;
+            }
+			previewPicture.Refresh();		
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void RotationBox_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+            if (RotationBox.SelectedIndex == RotationBox.Items.Count - 1)
+            {
+                string current = null;
+                if (m_item.Item.GetType() == typeof(MarkSymbolType))
+                    current = ((MarkSymbolType)m_item.Item).Rotation;
+                else if (m_item.Item.GetType() == typeof(FontSymbolType))
+                    current = ((FontSymbolType)m_item.Item).Rotation;
+
+                string expr = null;
+                if (current != null)
+                {
+                    expr = m_editor.EditExpression(current, m_schema, m_providername, m_featureSource);
+                    if (!string.IsNullOrEmpty(expr))
+                        current = expr;
+                }
+
+                //This is required as we cannot update the text from within the SelectedIndexChanged event :(
+                BeginInvoke(new UpdateComboTextFromSelectChangedDelegate(UpdateComboTextFromSelectChanged), RotationBox, current, expr != null);
+            }
+            else if (RotationBox.SelectedIndex != -1)
+            {
+                if (m_item.Item.GetType() == typeof(MarkSymbolType))
+                    ((MarkSymbolType)m_item.Item).Rotation = (string)RotationBox.SelectedValue;
+                else if (m_item.Item.GetType() == typeof(FontSymbolType))
+                    ((FontSymbolType)m_item.Item).Rotation = (string)RotationBox.SelectedValue;
+
+                //RotationBox.SelectedIndex = -1;
+            }
+
+		}
+
+		private void displayFill_CheckedChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+			if (m_item.Item.GetType() == typeof(MarkSymbolType))
+				if (fillStyleEditor.displayFill.Checked)
+					((MarkSymbolType) m_item.Item).Fill = previousFill == null ? ObjectFactory.CreateDefaultFill() : previousFill;
+				else
+				{
+					if (((MarkSymbolType) m_item.Item).Fill != null)
+						previousFill = ((MarkSymbolType) m_item.Item).Fill;
+					((MarkSymbolType) m_item.Item).Fill = null;
+				}
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void displayLine_CheckedChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+			if (m_item.Item.GetType() == typeof(MarkSymbolType))
+				if (lineStyleEditor.displayLine.Checked)
+					((MarkSymbolType) m_item.Item).Edge = previousEdge == null ? ObjectFactory.CreateDefaultStroke() : previousEdge;
+				else
+				{
+					if (((MarkSymbolType) m_item.Item).Edge != null)
+						previousEdge = ((MarkSymbolType) m_item.Item).Edge;
+					((MarkSymbolType) m_item.Item).Edge = null;
+				}
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void fillCombo_SelectedIndexChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+			if (m_item.Item.GetType() == typeof(MarkSymbolType))
+				((MarkSymbolType) m_item.Item).Fill.FillPattern = fillStyleEditor.fillCombo.Text;
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void foregroundColor_CurrentColorChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+            if (m_item.Item.GetType() == typeof(MarkSymbolType))
+                ((MarkSymbolType)m_item.Item).Fill.ForegroundColor = Utility.SerializeHTMLColor(fillStyleEditor.foregroundColor.CurrentColor, true);
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void backgroundColor_CurrentColorChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+            if (m_item.Item.GetType() == typeof(MarkSymbolType))
+                ((MarkSymbolType)m_item.Item).Fill.BackgroundColor = Utility.SerializeHTMLColor(fillStyleEditor.backgroundColor.CurrentColor, true);
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+
+        private void thicknessCombo_TextChanged(object sender, EventArgs e)
+        {
+            if (m_inUpdate || lineStyleEditor.thicknessCombo.SelectedIndex != -1)
+                return;
+
+            //TODO: Validate
+            if (m_item.Item.GetType() == typeof(MarkSymbolType))
+                ((MarkSymbolType)m_item.Item).Edge.Thickness = lineStyleEditor.thicknessCombo.Text;
+            previewPicture.Refresh();
+            if (Changed != null)
+                Changed(this, new EventArgs());
+        }
+
+        private void thicknessCombo_SelectedIndexChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate || lineStyleEditor.thicknessCombo.SelectedIndex != lineStyleEditor.thicknessCombo.Items.Count - 1)
+				return;
+
+                string current = null;
+                if (m_item.Item.GetType() == typeof(MarkSymbolType))
+                    current = ((MarkSymbolType)m_item.Item).Edge.Thickness;
+
+                string expr = null;
+                if (current != null)
+                {
+                    expr = m_editor.EditExpression(current, m_schema, m_providername, m_featureSource);
+                    if (!string.IsNullOrEmpty(expr))
+                        current = expr;
+                }
+
+                //This is required as we cannot update the text from within the SelectedIndexChanged event :(
+                BeginInvoke(new UpdateComboTextFromSelectChangedDelegate(UpdateComboTextFromSelectChanged), lineStyleEditor.thicknessCombo, current, expr != null);
+        }
+
+		private void colorCombo_CurrentColorChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+            if (m_item.Item.GetType() == typeof(MarkSymbolType))
+                ((MarkSymbolType)m_item.Item).Edge.Color = Utility.SerializeHTMLColor(lineStyleEditor.colorCombo.CurrentColor, true);
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void fillCombo_Line_SelectedIndexChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+			if (m_item.Item.GetType() == typeof(MarkSymbolType))
+				((MarkSymbolType) m_item.Item).Edge.LineStyle = lineStyleEditor.fillCombo.Text;
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void colourFontForeground_CurrentColorChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+            if (m_item.Item.GetType() == typeof(FontSymbolType))
+                ((FontSymbolType)m_item.Item).ForegroundColor = Utility.SerializeHTMLColor(colorFontForeground.CurrentColor, true);
+
+            previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void fontCombo_SelectedIndexChanged(object sender, EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+			//TODO: Validate
+			if (!(m_item.Item is FontSymbolType))
+				return;
+			((FontSymbolType)m_item.Item).FontName = fontCombo.Text;
+
+			comboBoxCharacter.Items.Clear();
+			try
+			{
+				comboBoxCharacter.Font = new Font(fontCombo.SelectedText, (float)8.25);
+			}
+			catch
+			{
+				MessageBox.Show(this, string.Format(Properties.Resources.SymbolTypeNotSupported, fontCombo.SelectedText), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
+				return;
+			}
+
+			// populate with a basic A-Z
+			for (char c = 'A'; c < 'Z'; c++)
+				comboBoxCharacter.Items.Add(c);
+
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void comboBoxCharacter_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			if (m_inUpdate)
+				return;
+
+			//TODO: Validate
+			if (m_item.Item.GetType() != typeof(FontSymbolType))
+				return;
+			((FontSymbolType)m_item.Item).Character = comboBoxCharacter.Text;
+
+			previewPicture.Refresh();
+			if (Changed != null)
+				Changed(this, new EventArgs());
+		}
+
+		private void comboBoxCharacter_TextChanged(object sender, System.EventArgs e)
+		{
+			comboBoxCharacter_SelectedIndexChanged(sender, e);
+		}
+
+
+		public PointSymbolization2DType Item
+		{
+			get { return m_item; }
+			set 
+			{
+				m_item = value;
+				UpdateDisplay();
+			}
+		}
+
+        private void DisplayPoints_CheckedChanged(object sender, EventArgs e)
+        {
+            foreach (Control c in this.Controls)
+                c.Enabled = c == DisplayPoints || DisplayPoints.Checked;
+
+            if (m_inUpdate)
+                return;
+
+            if (DisplayPoints.Checked)
+            {
+                if (DisplayPoints.Tag as PointSymbolization2DType != null)
+                    this.Item = DisplayPoints.Tag as PointSymbolization2DType;
+                if (m_item == null)
+                    this.Item = new PointSymbolization2DType();
+            }
+            else
+            {
+                DisplayPoints.Tag = m_item;
+                this.Item = null;
+            }
+        }
+
+        private void WidthText_TextChanged(object sender, EventArgs e)
+        {
+            if (m_inUpdate || WidthText.SelectedIndex != -1)
+                return;
+
+            //TODO: Validate
+            if (m_item.Item.GetType() == typeof(MarkSymbolType))
+                ((MarkSymbolType)m_item.Item).SizeX = WidthText.Text;
+            else if (m_item.Item.GetType() == typeof(FontSymbolType))
+                ((FontSymbolType)m_item.Item).SizeX = WidthText.Text;
+            previewPicture.Refresh();
+            if (Changed != null)
+                Changed(this, new EventArgs());
+        }
+
+        private void HeigthText_TextChanged(object sender, EventArgs e)
+        {
+            if (m_inUpdate || HeigthText.SelectedIndex != -1)
+                return;
+
+            //TODO: Validate
+            if (m_item.Item.GetType() == typeof(MarkSymbolType))
+                ((MarkSymbolType)m_item.Item).SizeY = HeigthText.Text;
+            else if (m_item.Item.GetType() == typeof(FontSymbolType))
+                ((FontSymbolType)m_item.Item).SizeY = HeigthText.Text;
+            previewPicture.Refresh();
+            if (Changed != null)
+                Changed(this, new EventArgs());
+        }
+
+		private void RotationBox_TextChanged(object sender, EventArgs e)
+		{
+            if (m_inUpdate || RotationBox.SelectedIndex != -1)
+                return;
+
+            //TODO: Validate
+            if (m_item.Item.GetType() == typeof(MarkSymbolType))
+                ((MarkSymbolType)m_item.Item).Rotation = RotationBox.Text;
+            else if (m_item.Item.GetType() == typeof(FontSymbolType))
+                ((FontSymbolType)m_item.Item).Rotation = RotationBox.Text;
+            previewPicture.Refresh();
+            if (Changed != null)
+                Changed(this, new EventArgs());
+		}
+		
+		private void ReferenceY_Leave(object sender, EventArgs e)
+        {
+            //double d;
+            //if (m_item.Item is MarkSymbolType)
+            //    if (!double.TryParse(((MarkSymbolType)m_item.Item).InsertionPointY, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out d))
+            //        MessageBox.Show(this, Properties.Resources.InsertionPointYError, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
+        }
+
+        private void FontBoldButton_Click(object sender, EventArgs e)
+        {
+            if (m_inUpdate)
+                return;
+
+            if (m_item.Item is FontSymbolType)
+            {
+                ((FontSymbolType)m_item.Item).Bold = FontBoldButton.Checked;
+                ((FontSymbolType)m_item.Item).BoldSpecified = true;
+            }
+
+            previewPicture.Refresh();
+            if (Changed != null)
+                Changed(this, new EventArgs());
+        }
+
+        private void FontItalicButton_Click(object sender, EventArgs e)
+        {
+            if (m_inUpdate)
+                return;
+
+            if (m_item.Item is FontSymbolType)
+            {
+                ((FontSymbolType)m_item.Item).Italic = FontItalicButton.Checked;
+                ((FontSymbolType)m_item.Item).ItalicSpecified = true;
+            }
+
+            previewPicture.Refresh();
+            if (Changed != null)
+                Changed(this, new EventArgs());
+        }
+
+        private void FontUnderlineButton_Click(object sender, EventArgs e)
+        {
+            if (m_inUpdate)
+                return;
+
+            if (m_item.Item is FontSymbolType)
+            {
+                ((FontSymbolType)m_item.Item).Underlined = FontUnderlineButton.Checked;
+                ((FontSymbolType)m_item.Item).UnderlinedSpecified = true;
+            }
+
+            previewPicture.Refresh();
+            if (Changed != null)
+                Changed(this, new EventArgs());
+        }
+
+        internal void SetupForTheming()
+        {
+            fillStyleEditor.foregroundColor.Enabled = 
+            lineStyleEditor.lblColor.Enabled = 
+            colorFontForeground.Enabled =
+            lblForeground.Enabled =
+            DisplayPoints.Enabled =
+            fillStyleEditor.displayFill.Enabled =
+                false;
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/PointFeatureStyleEditor.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/PointFeatureStyleEditor.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/PointFeatureStyleEditor.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,1284 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="groupBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="RotationBox.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="RotationBox.Location" type="System.Drawing.Point, System.Drawing">
+    <value>128, 176</value>
+  </data>
+  <data name="RotationBox.Size" type="System.Drawing.Size, System.Drawing">
+    <value>208, 21</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="RotationBox.TabIndex" type="System.Int32, mscorlib">
+    <value>29</value>
+  </data>
+  <data name="&gt;&gt;RotationBox.Name" xml:space="preserve">
+    <value>RotationBox</value>
+  </data>
+  <data name="&gt;&gt;RotationBox.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;RotationBox.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;RotationBox.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="label9.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label9.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 184</value>
+  </data>
+  <data name="label9.Size" type="System.Drawing.Size, System.Drawing">
+    <value>47, 13</value>
+  </data>
+  <data name="label9.TabIndex" type="System.Int32, mscorlib">
+    <value>28</value>
+  </data>
+  <data name="label9.Text" xml:space="preserve">
+    <value>Rotation</value>
+  </data>
+  <data name="&gt;&gt;label9.Name" xml:space="preserve">
+    <value>label9</value>
+  </data>
+  <data name="&gt;&gt;label9.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label9.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;label9.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="HeigthText.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="HeigthText.Items" xml:space="preserve">
+    <value>Expression...</value>
+  </data>
+  <data name="HeigthText.Location" type="System.Drawing.Point, System.Drawing">
+    <value>128, 144</value>
+  </data>
+  <data name="HeigthText.Size" type="System.Drawing.Size, System.Drawing">
+    <value>208, 21</value>
+  </data>
+  <data name="HeigthText.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="&gt;&gt;HeigthText.Name" xml:space="preserve">
+    <value>HeigthText</value>
+  </data>
+  <data name="&gt;&gt;HeigthText.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;HeigthText.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;HeigthText.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="WidthText.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="WidthText.Items" xml:space="preserve">
+    <value>Expression...</value>
+  </data>
+  <data name="WidthText.Location" type="System.Drawing.Point, System.Drawing">
+    <value>128, 112</value>
+  </data>
+  <data name="WidthText.Size" type="System.Drawing.Size, System.Drawing">
+    <value>208, 21</value>
+  </data>
+  <data name="WidthText.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="&gt;&gt;WidthText.Name" xml:space="preserve">
+    <value>WidthText</value>
+  </data>
+  <data name="&gt;&gt;WidthText.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;WidthText.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;WidthText.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="SizeUnits.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="SizeUnits.Location" type="System.Drawing.Point, System.Drawing">
+    <value>128, 80</value>
+  </data>
+  <data name="SizeUnits.Size" type="System.Drawing.Size, System.Drawing">
+    <value>208, 21</value>
+  </data>
+  <data name="SizeUnits.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="&gt;&gt;SizeUnits.Name" xml:space="preserve">
+    <value>SizeUnits</value>
+  </data>
+  <data name="&gt;&gt;SizeUnits.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;SizeUnits.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;SizeUnits.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="SizeContext.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="SizeContext.Location" type="System.Drawing.Point, System.Drawing">
+    <value>128, 48</value>
+  </data>
+  <data name="SizeContext.Size" type="System.Drawing.Size, System.Drawing">
+    <value>208, 21</value>
+  </data>
+  <data name="SizeContext.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="&gt;&gt;SizeContext.Name" xml:space="preserve">
+    <value>SizeContext</value>
+  </data>
+  <data name="&gt;&gt;SizeContext.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;SizeContext.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;SizeContext.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="Symbol.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="Symbol.Location" type="System.Drawing.Point, System.Drawing">
+    <value>128, 16</value>
+  </data>
+  <data name="Symbol.Size" type="System.Drawing.Size, System.Drawing">
+    <value>208, 21</value>
+  </data>
+  <data name="Symbol.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;Symbol.Name" xml:space="preserve">
+    <value>Symbol</value>
+  </data>
+  <data name="&gt;&gt;Symbol.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;Symbol.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;Symbol.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="label5.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label5.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 152</value>
+  </data>
+  <data name="label5.Size" type="System.Drawing.Size, System.Drawing">
+    <value>38, 13</value>
+  </data>
+  <data name="label5.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="label5.Text" xml:space="preserve">
+    <value>Height</value>
+  </data>
+  <data name="&gt;&gt;label5.Name" xml:space="preserve">
+    <value>label5</value>
+  </data>
+  <data name="&gt;&gt;label5.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label5.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;label5.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="label4.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label4.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 120</value>
+  </data>
+  <data name="label4.Size" type="System.Drawing.Size, System.Drawing">
+    <value>35, 13</value>
+  </data>
+  <data name="label4.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="label4.Text" xml:space="preserve">
+    <value>Width</value>
+  </data>
+  <data name="&gt;&gt;label4.Name" xml:space="preserve">
+    <value>label4</value>
+  </data>
+  <data name="&gt;&gt;label4.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label4.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
+    <value>8</value>
+  </data>
+  <data name="label3.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 88</value>
+  </data>
+  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>52, 13</value>
+  </data>
+  <data name="label3.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="label3.Text" xml:space="preserve">
+    <value>Size units</value>
+  </data>
+  <data name="&gt;&gt;label3.Name" xml:space="preserve">
+    <value>label3</value>
+  </data>
+  <data name="&gt;&gt;label3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label3.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
+    <value>9</value>
+  </data>
+  <data name="label2.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 56</value>
+  </data>
+  <data name="label2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>65, 13</value>
+  </data>
+  <data name="label2.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="label2.Text" xml:space="preserve">
+    <value>Size context</value>
+  </data>
+  <data name="&gt;&gt;label2.Name" xml:space="preserve">
+    <value>label2</value>
+  </data>
+  <data name="&gt;&gt;label2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label2.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
+    <value>10</value>
+  </data>
+  <data name="label1.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 24</value>
+  </data>
+  <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>41, 13</value>
+  </data>
+  <data name="label1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="label1.Text" xml:space="preserve">
+    <value>Symbol</value>
+  </data>
+  <data name="&gt;&gt;label1.Name" xml:space="preserve">
+    <value>label1</value>
+  </data>
+  <data name="&gt;&gt;label1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label1.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
+    <value>11</value>
+  </data>
+  <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 24</value>
+  </data>
+  <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>344, 208</value>
+  </data>
+  <data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="groupBox1.Text" xml:space="preserve">
+    <value>Symbol style</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="groupBox2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="fillStyleEditor.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="fillStyleEditor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 16</value>
+  </data>
+  <data name="fillStyleEditor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>338, 149</value>
+  </data>
+  <data name="fillStyleEditor.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;fillStyleEditor.Name" xml:space="preserve">
+    <value>fillStyleEditor</value>
+  </data>
+  <data name="&gt;&gt;fillStyleEditor.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.FillStyleEditor, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4437, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;fillStyleEditor.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name="&gt;&gt;fillStyleEditor.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 440</value>
+  </data>
+  <data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>344, 168</value>
+  </data>
+  <data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="groupBox2.Text" xml:space="preserve">
+    <value>Symbol fill</value>
+  </data>
+  <data name="&gt;&gt;groupBox2.Name" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name="&gt;&gt;groupBox2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;groupBox2.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;groupBox2.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="groupBox3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="lineStyleEditor.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="lineStyleEditor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 16</value>
+  </data>
+  <data name="lineStyleEditor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>338, 133</value>
+  </data>
+  <data name="lineStyleEditor.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;lineStyleEditor.Name" xml:space="preserve">
+    <value>lineStyleEditor</value>
+  </data>
+  <data name="&gt;&gt;lineStyleEditor.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.LineStyleEditor, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4437, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;lineStyleEditor.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;lineStyleEditor.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="groupBox3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 616</value>
+  </data>
+  <data name="groupBox3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>344, 152</value>
+  </data>
+  <data name="groupBox3.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="groupBox3.Text" xml:space="preserve">
+    <value>Symbol border</value>
+  </data>
+  <data name="&gt;&gt;groupBox3.Name" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;groupBox3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;groupBox3.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;groupBox3.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="groupBox4.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="previewPicture.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left, Right</value>
+  </data>
+  <data name="previewPicture.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 16</value>
+  </data>
+  <data name="previewPicture.Size" type="System.Drawing.Size, System.Drawing">
+    <value>328, 24</value>
+  </data>
+  <data name="previewPicture.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Name" xml:space="preserve">
+    <value>previewPicture</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Type" xml:space="preserve">
+    <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.Parent" xml:space="preserve">
+    <value>groupBox4</value>
+  </data>
+  <data name="&gt;&gt;previewPicture.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="groupBox4.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 776</value>
+  </data>
+  <data name="groupBox4.Size" type="System.Drawing.Size, System.Drawing">
+    <value>344, 48</value>
+  </data>
+  <data name="groupBox4.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="groupBox4.Text" xml:space="preserve">
+    <value>Preview</value>
+  </data>
+  <data name="&gt;&gt;groupBox4.Name" xml:space="preserve">
+    <value>groupBox4</value>
+  </data>
+  <data name="&gt;&gt;groupBox4.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;groupBox4.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;groupBox4.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <metadata name="ComboBoxDataSet.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="DisplayPoints.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="DisplayPoints.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="DisplayPoints.Size" type="System.Drawing.Size, System.Drawing">
+    <value>91, 17</value>
+  </data>
+  <data name="DisplayPoints.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="DisplayPoints.Text" xml:space="preserve">
+    <value>Display points</value>
+  </data>
+  <data name="&gt;&gt;DisplayPoints.Name" xml:space="preserve">
+    <value>DisplayPoints</value>
+  </data>
+  <data name="&gt;&gt;DisplayPoints.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;DisplayPoints.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;DisplayPoints.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="groupBoxFont.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="label11.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label11.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label11.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 80</value>
+  </data>
+  <data name="label11.Size" type="System.Drawing.Size, System.Drawing">
+    <value>72, 13</value>
+  </data>
+  <data name="label11.TabIndex" type="System.Int32, mscorlib">
+    <value>15</value>
+  </data>
+  <data name="label11.Text" xml:space="preserve">
+    <value>Transparency</value>
+  </data>
+  <data name="&gt;&gt;label11.Name" xml:space="preserve">
+    <value>label11</value>
+  </data>
+  <data name="&gt;&gt;label11.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label11.Parent" xml:space="preserve">
+    <value>groupBoxFont</value>
+  </data>
+  <data name="&gt;&gt;label11.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="colorFontForeground.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="colorFontForeground.Location" type="System.Drawing.Point, System.Drawing">
+    <value>96, 56</value>
+  </data>
+  <data name="colorFontForeground.Size" type="System.Drawing.Size, System.Drawing">
+    <value>136, 48</value>
+  </data>
+  <data name="colorFontForeground.TabIndex" type="System.Int32, mscorlib">
+    <value>14</value>
+  </data>
+  <data name="&gt;&gt;colorFontForeground.Name" xml:space="preserve">
+    <value>colorFontForeground</value>
+  </data>
+  <data name="&gt;&gt;colorFontForeground.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.ColorComboWithTransparency, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4437, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;colorFontForeground.Parent" xml:space="preserve">
+    <value>groupBoxFont</value>
+  </data>
+  <data name="&gt;&gt;colorFontForeground.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>0, 0</value>
+  </metadata>
+  <data name="FontBoldButton.Font" type="System.Drawing.Font, System.Drawing">
+    <value>Segoe UI, 9pt, style=Bold</value>
+  </data>
+  <data name="FontBoldButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI
+        ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9
+        HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN
+        rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K
+        TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx
+        oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8
+        7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI
+        xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX
+        LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd
+        KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="FontBoldButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="FontBoldButton.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
+  </data>
+  <data name="FontBoldButton.Text" xml:space="preserve">
+    <value>B</value>
+  </data>
+  <data name="FontBoldButton.ToolTipText" xml:space="preserve">
+    <value>Set bold font</value>
+  </data>
+  <data name="FontItalicButton.Font" type="System.Drawing.Font, System.Drawing">
+    <value>Segoe UI, 9pt, style=Italic</value>
+  </data>
+  <data name="FontItalicButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI
+        ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9
+        HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN
+        rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K
+        TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx
+        oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8
+        7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI
+        xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX
+        LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd
+        KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="FontItalicButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="FontItalicButton.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
+  </data>
+  <data name="FontItalicButton.Text" xml:space="preserve">
+    <value>I</value>
+  </data>
+  <data name="FontItalicButton.ToolTipText" xml:space="preserve">
+    <value>Set italic font</value>
+  </data>
+  <data name="FontUnderlineButton.Font" type="System.Drawing.Font, System.Drawing">
+    <value>Segoe UI, 9pt, style=Underline</value>
+  </data>
+  <data name="FontUnderlineButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI
+        ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9
+        HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN
+        rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K
+        TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx
+        oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8
+        7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI
+        xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX
+        LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd
+        KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="FontUnderlineButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="FontUnderlineButton.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
+  </data>
+  <data name="FontUnderlineButton.Text" xml:space="preserve">
+    <value>U</value>
+  </data>
+  <data name="FontUnderlineButton.ToolTipText" xml:space="preserve">
+    <value>Set underlined font</value>
+  </data>
+  <data name="toolStrip1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="toolStrip1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>88, 25</value>
+  </data>
+  <data name="toolStrip1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="toolStrip1.Text" xml:space="preserve">
+    <value>toolStrip1</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Name" xml:space="preserve">
+    <value>toolStrip1</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>248, 56</value>
+  </data>
+  <data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>88, 24</value>
+  </data>
+  <data name="panel1.TabIndex" type="System.Int32, mscorlib">
+    <value>13</value>
+  </data>
+  <data name="&gt;&gt;panel1.Name" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name="&gt;&gt;panel1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;panel1.Parent" xml:space="preserve">
+    <value>groupBoxFont</value>
+  </data>
+  <data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="lblForeground.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="lblForeground.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 56</value>
+  </data>
+  <data name="lblForeground.Size" type="System.Drawing.Size, System.Drawing">
+    <value>31, 13</value>
+  </data>
+  <data name="lblForeground.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name="lblForeground.Text" xml:space="preserve">
+    <value>Color</value>
+  </data>
+  <data name="&gt;&gt;lblForeground.Name" xml:space="preserve">
+    <value>lblForeground</value>
+  </data>
+  <data name="&gt;&gt;lblForeground.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;lblForeground.Parent" xml:space="preserve">
+    <value>groupBoxFont</value>
+  </data>
+  <data name="&gt;&gt;lblForeground.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="comboBoxCharacter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Right</value>
+  </data>
+  <data name="comboBoxCharacter.Location" type="System.Drawing.Point, System.Drawing">
+    <value>248, 24</value>
+  </data>
+  <data name="comboBoxCharacter.MaxLength" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="comboBoxCharacter.Size" type="System.Drawing.Size, System.Drawing">
+    <value>80, 21</value>
+  </data>
+  <data name="comboBoxCharacter.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="&gt;&gt;comboBoxCharacter.Name" xml:space="preserve">
+    <value>comboBoxCharacter</value>
+  </data>
+  <data name="&gt;&gt;comboBoxCharacter.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;comboBoxCharacter.Parent" xml:space="preserve">
+    <value>groupBoxFont</value>
+  </data>
+  <data name="&gt;&gt;comboBoxCharacter.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="fontCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="fontCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>96, 24</value>
+  </data>
+  <data name="fontCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>136, 21</value>
+  </data>
+  <data name="fontCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="&gt;&gt;fontCombo.Name" xml:space="preserve">
+    <value>fontCombo</value>
+  </data>
+  <data name="&gt;&gt;fontCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;fontCombo.Parent" xml:space="preserve">
+    <value>groupBoxFont</value>
+  </data>
+  <data name="&gt;&gt;fontCombo.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="label10.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label10.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 32</value>
+  </data>
+  <data name="label10.Size" type="System.Drawing.Size, System.Drawing">
+    <value>28, 13</value>
+  </data>
+  <data name="label10.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="label10.Text" xml:space="preserve">
+    <value>Font</value>
+  </data>
+  <data name="&gt;&gt;label10.Name" xml:space="preserve">
+    <value>label10</value>
+  </data>
+  <data name="&gt;&gt;label10.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label10.Parent" xml:space="preserve">
+    <value>groupBoxFont</value>
+  </data>
+  <data name="&gt;&gt;label10.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="groupBoxFont.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 240</value>
+  </data>
+  <data name="groupBoxFont.Size" type="System.Drawing.Size, System.Drawing">
+    <value>344, 112</value>
+  </data>
+  <data name="groupBoxFont.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="groupBoxFont.Text" xml:space="preserve">
+    <value>Font style</value>
+  </data>
+  <data name="&gt;&gt;groupBoxFont.Name" xml:space="preserve">
+    <value>groupBoxFont</value>
+  </data>
+  <data name="&gt;&gt;groupBoxFont.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;groupBoxFont.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;groupBoxFont.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="groupBoxSymbolLocation.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="button1.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
+    <value>System</value>
+  </data>
+  <data name="button1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>284, 40</value>
+  </data>
+  <data name="button1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>24, 24</value>
+  </data>
+  <data name="button1.TabIndex" type="System.Int32, mscorlib">
+    <value>25</value>
+  </data>
+  <data name="button1.Text" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="&gt;&gt;button1.Name" xml:space="preserve">
+    <value>button1</value>
+  </data>
+  <data name="&gt;&gt;button1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;button1.Parent" xml:space="preserve">
+    <value>groupBoxSymbolLocation</value>
+  </data>
+  <data name="&gt;&gt;button1.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="ReferenceY.Location" type="System.Drawing.Point, System.Drawing">
+    <value>228, 40</value>
+  </data>
+  <data name="ReferenceY.Size" type="System.Drawing.Size, System.Drawing">
+    <value>48, 20</value>
+  </data>
+  <data name="ReferenceY.TabIndex" type="System.Int32, mscorlib">
+    <value>24</value>
+  </data>
+  <data name="&gt;&gt;ReferenceY.Name" xml:space="preserve">
+    <value>ReferenceY</value>
+  </data>
+  <data name="&gt;&gt;ReferenceY.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ReferenceY.Parent" xml:space="preserve">
+    <value>groupBoxSymbolLocation</value>
+  </data>
+  <data name="&gt;&gt;ReferenceY.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="label8.Location" type="System.Drawing.Point, System.Drawing">
+    <value>212, 40</value>
+  </data>
+  <data name="label8.Size" type="System.Drawing.Size, System.Drawing">
+    <value>16, 16</value>
+  </data>
+  <data name="label8.TabIndex" type="System.Int32, mscorlib">
+    <value>23</value>
+  </data>
+  <data name="label8.Text" xml:space="preserve">
+    <value>Y</value>
+  </data>
+  <data name="&gt;&gt;label8.Name" xml:space="preserve">
+    <value>label8</value>
+  </data>
+  <data name="&gt;&gt;label8.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label8.Parent" xml:space="preserve">
+    <value>groupBoxSymbolLocation</value>
+  </data>
+  <data name="&gt;&gt;label8.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="ReferenceX.Location" type="System.Drawing.Point, System.Drawing">
+    <value>140, 40</value>
+  </data>
+  <data name="ReferenceX.Size" type="System.Drawing.Size, System.Drawing">
+    <value>48, 20</value>
+  </data>
+  <data name="ReferenceX.TabIndex" type="System.Int32, mscorlib">
+    <value>22</value>
+  </data>
+  <data name="&gt;&gt;ReferenceX.Name" xml:space="preserve">
+    <value>ReferenceX</value>
+  </data>
+  <data name="&gt;&gt;ReferenceX.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ReferenceX.Parent" xml:space="preserve">
+    <value>groupBoxSymbolLocation</value>
+  </data>
+  <data name="&gt;&gt;ReferenceX.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="label7.Location" type="System.Drawing.Point, System.Drawing">
+    <value>124, 40</value>
+  </data>
+  <data name="label7.Size" type="System.Drawing.Size, System.Drawing">
+    <value>16, 16</value>
+  </data>
+  <data name="label7.TabIndex" type="System.Int32, mscorlib">
+    <value>21</value>
+  </data>
+  <data name="label7.Text" xml:space="preserve">
+    <value>X</value>
+  </data>
+  <data name="&gt;&gt;label7.Name" xml:space="preserve">
+    <value>label7</value>
+  </data>
+  <data name="&gt;&gt;label7.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label7.Parent" xml:space="preserve">
+    <value>groupBoxSymbolLocation</value>
+  </data>
+  <data name="&gt;&gt;label7.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="label6.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label6.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 40</value>
+  </data>
+  <data name="label6.Size" type="System.Drawing.Size, System.Drawing">
+    <value>83, 13</value>
+  </data>
+  <data name="label6.TabIndex" type="System.Int32, mscorlib">
+    <value>20</value>
+  </data>
+  <data name="label6.Text" xml:space="preserve">
+    <value>Reference point</value>
+  </data>
+  <data name="&gt;&gt;label6.Name" xml:space="preserve">
+    <value>label6</value>
+  </data>
+  <data name="&gt;&gt;label6.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label6.Parent" xml:space="preserve">
+    <value>groupBoxSymbolLocation</value>
+  </data>
+  <data name="&gt;&gt;label6.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="MaintainAspectRatio.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="MaintainAspectRatio.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
+    <value>System</value>
+  </data>
+  <data name="MaintainAspectRatio.Location" type="System.Drawing.Point, System.Drawing">
+    <value>124, 16</value>
+  </data>
+  <data name="MaintainAspectRatio.Size" type="System.Drawing.Size, System.Drawing">
+    <value>208, 16</value>
+  </data>
+  <data name="MaintainAspectRatio.TabIndex" type="System.Int32, mscorlib">
+    <value>19</value>
+  </data>
+  <data name="MaintainAspectRatio.Text" xml:space="preserve">
+    <value>Maintain aspect ratio</value>
+  </data>
+  <data name="&gt;&gt;MaintainAspectRatio.Name" xml:space="preserve">
+    <value>MaintainAspectRatio</value>
+  </data>
+  <data name="&gt;&gt;MaintainAspectRatio.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;MaintainAspectRatio.Parent" xml:space="preserve">
+    <value>groupBoxSymbolLocation</value>
+  </data>
+  <data name="&gt;&gt;MaintainAspectRatio.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="groupBoxSymbolLocation.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 360</value>
+  </data>
+  <data name="groupBoxSymbolLocation.Size" type="System.Drawing.Size, System.Drawing">
+    <value>344, 72</value>
+  </data>
+  <data name="groupBoxSymbolLocation.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="groupBoxSymbolLocation.Text" xml:space="preserve">
+    <value>Symbol location</value>
+  </data>
+  <data name="&gt;&gt;groupBoxSymbolLocation.Name" xml:space="preserve">
+    <value>groupBoxSymbolLocation</value>
+  </data>
+  <data name="&gt;&gt;groupBoxSymbolLocation.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;groupBoxSymbolLocation.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;groupBoxSymbolLocation.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScroll" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="$this.AutoScrollMinSize" type="System.Drawing.Size, System.Drawing">
+    <value>344, 824</value>
+  </data>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>344, 824</value>
+  </data>
+  <data name="&gt;&gt;RotationTable.Name" xml:space="preserve">
+    <value>RotationTable</value>
+  </data>
+  <data name="&gt;&gt;RotationTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn7.Name" xml:space="preserve">
+    <value>dataColumn7</value>
+  </data>
+  <data name="&gt;&gt;dataColumn7.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn8.Name" xml:space="preserve">
+    <value>dataColumn8</value>
+  </data>
+  <data name="&gt;&gt;dataColumn8.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;UnitsTable.Name" xml:space="preserve">
+    <value>UnitsTable</value>
+  </data>
+  <data name="&gt;&gt;UnitsTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn5.Name" xml:space="preserve">
+    <value>dataColumn5</value>
+  </data>
+  <data name="&gt;&gt;dataColumn5.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn6.Name" xml:space="preserve">
+    <value>dataColumn6</value>
+  </data>
+  <data name="&gt;&gt;dataColumn6.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;SizeContextTable.Name" xml:space="preserve">
+    <value>SizeContextTable</value>
+  </data>
+  <data name="&gt;&gt;SizeContextTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn3.Name" xml:space="preserve">
+    <value>dataColumn3</value>
+  </data>
+  <data name="&gt;&gt;dataColumn3.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn4.Name" xml:space="preserve">
+    <value>dataColumn4</value>
+  </data>
+  <data name="&gt;&gt;dataColumn4.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;SymbolMarkTable.Name" xml:space="preserve">
+    <value>SymbolMarkTable</value>
+  </data>
+  <data name="&gt;&gt;SymbolMarkTable.Type" xml:space="preserve">
+    <value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn1.Name" xml:space="preserve">
+    <value>dataColumn1</value>
+  </data>
+  <data name="&gt;&gt;dataColumn1.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;dataColumn2.Name" xml:space="preserve">
+    <value>dataColumn2</value>
+  </data>
+  <data name="&gt;&gt;dataColumn2.Type" xml:space="preserve">
+    <value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ComboBoxDataSet.Name" xml:space="preserve">
+    <value>ComboBoxDataSet</value>
+  </data>
+  <data name="&gt;&gt;ComboBoxDataSet.Type" xml:space="preserve">
+    <value>System.Data.DataSet, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;FontBoldButton.Name" xml:space="preserve">
+    <value>FontBoldButton</value>
+  </data>
+  <data name="&gt;&gt;FontBoldButton.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;FontItalicButton.Name" xml:space="preserve">
+    <value>FontItalicButton</value>
+  </data>
+  <data name="&gt;&gt;FontItalicButton.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;FontUnderlineButton.Name" xml:space="preserve">
+    <value>FontUnderlineButton</value>
+  </data>
+  <data name="&gt;&gt;FontUnderlineButton.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>PointFeatureStyleEditor</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/ScaleRangeEditor.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/ScaleRangeEditor.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/ScaleRangeEditor.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,80 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Windows.Forms;
+
+namespace Maestro.Editors.LayerDefinition.Vector.StyleEditors
+{
+	/// <summary>
+	/// Summary description for ScaleRangeEditor.
+	/// </summary>
+	public class ScaleRangeEditor : System.Windows.Forms.UserControl
+	{
+		/// <summary> 
+		/// Required designer variable.
+		/// </summary>
+		private System.ComponentModel.Container components = null;
+
+		public ScaleRangeEditor()
+		{
+			// This call is required by the Windows.Forms Form Designer.
+			InitializeComponent();
+
+			// TODO: Add any initialization after the InitializeComponent call
+
+		}
+
+		/// <summary> 
+		/// Clean up any resources being used.
+		/// </summary>
+		protected override void Dispose( bool disposing )
+		{
+			if( disposing )
+			{
+				if(components != null)
+				{
+					components.Dispose();
+				}
+			}
+			base.Dispose( disposing );
+		}
+
+		#region Component Designer generated code
+		/// <summary> 
+		/// Required method for Designer support - do not modify 
+		/// the contents of this method with the code editor.
+		/// </summary>
+		private void InitializeComponent()
+		{
+            this.SuspendLayout();
+            // 
+            // ScaleRangeEditor
+            // 
+            this.Name = "ScaleRangeEditor";
+            this.ResumeLayout(false);
+
+		}
+		#endregion
+	}
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/ScaleRangeEditor.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/ScaleRangeEditor.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/StyleEditors/ScaleRangeEditor.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>ScaleRangeEditor</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Copied: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ColorBrewer.cs (from rev 5035, trunk/Tools/Maestro/Maestro/ResourceEditors/ColorBrewer.cs)
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ColorBrewer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ColorBrewer.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,297 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Maestro.Editors.LayerDefinition.Vector.Thematics
+{
+    /// <summary>
+    /// Represents a ColorBrewer color set
+    /// </summary>
+    public class ColorBrewer
+    {
+        private string m_name;
+        private string m_type;
+        private List<System.Drawing.Color> m_colors;
+
+        /// <summary>
+        /// Gets the name of the ColorBrewer set
+        /// </summary>
+        public string Name { get { return m_name; } }
+        /// <summary>
+        /// Gets the assigned type for the ColorBrewer set
+        /// </summary>
+        public string Type { get { return m_type; } }
+        /// <summary>
+        /// Gets the ordered list of colors to use
+        /// </summary>
+        public List<System.Drawing.Color> Colors { get { return m_colors; } }
+
+        /// <summary>
+        /// Constructs a new ColorBrewer instance
+        /// </summary>
+        /// <param name="name">The name of the set</param>
+        /// <param name="type">The set type</param>
+        /// <param name="colors">The colors in the set</param>
+        public ColorBrewer(string name, string type, List<System.Drawing.Color> colors)
+        {
+            m_name = name;
+            m_type = type;
+            m_colors = colors;
+        }
+
+        /// <summary>
+        /// Parses a CSV file for ColorBrewer setup, uses double quotes for text delimiter, and comma for record delimiter
+        /// </summary>
+        /// <param name="filename">The name of the file to parse</param>
+        /// <returns>A list of parsed ColorBrewer sets</returns>
+        public static List<ColorBrewer> ParseCSV(string filename)
+        {
+            return ParseCSV(filename, '"', ',');
+        }
+
+        /// <summary>
+        /// Parses a CSV file for ColorBrewer setup
+        /// </summary>
+        /// <param name="filename">The name of the file to parse</param>
+        /// <param name="recordDelimiter">The character used to delimit the records</param>
+        /// <param name="textDelimiter">The character used to enclose strings</param>
+        /// <returns>A list of parsed ColorBrewer sets</returns>
+        public static List<ColorBrewer> ParseCSV(string filename, char textDelimiter, char recordDelimiter)
+        {
+            using (System.IO.StreamReader sr = new System.IO.StreamReader(filename, System.Text.Encoding.UTF8, true))
+            {
+                List<ColorBrewer> result = new List<ColorBrewer>();
+                Dictionary<string, int> columns = new Dictionary<string, int>();
+                List<string> colnames = TokenizeLine(sr.ReadLine(), recordDelimiter, textDelimiter);
+
+                for (int i = 0; i < colnames.Count; i++)
+                    colnames[i] = colnames[i].ToLower();
+
+                columns.Add("ColorName", colnames.IndexOf("colorname"));
+                columns.Add("NumOfColors", colnames.IndexOf("numofcolors"));
+                columns.Add("Type", colnames.IndexOf("type"));
+                columns.Add("CritVal", colnames.IndexOf("critval"));
+                columns.Add("ColorNum", colnames.IndexOf("colornum"));
+                columns.Add("ColorLetter", colnames.IndexOf("colorletter"));
+                columns.Add("R", colnames.IndexOf("r"));
+                columns.Add("G", colnames.IndexOf("g"));
+                columns.Add("B", colnames.IndexOf("b"));
+                columns.Add("SchemeType", colnames.IndexOf("schemetype"));
+
+                if (columns["ColorName"] < 0)
+                    throw new Exception(string.Format(Properties.Resources.MissingColumnError, "ColorName"));
+                if (columns["Type"] < 0)
+                    throw new Exception(string.Format(Properties.Resources.MissingColumnError, "Type"));
+                if (columns["NumOfColors"] < 0)
+                    throw new Exception(string.Format(Properties.Resources.MissingColumnError, "NumOfColors"));
+                if (columns["R"] < 0)
+                    throw new Exception(string.Format(Properties.Resources.MissingColumnError, "R"));
+                if (columns["G"] < 0)
+                    throw new Exception(string.Format(Properties.Resources.MissingColumnError, "G"));
+                if (columns["B"] < 0)
+                    throw new Exception(string.Format(Properties.Resources.MissingColumnError, "B"));
+
+                while (!sr.EndOfStream)
+                {
+                    string line = sr.ReadLine();
+                    List<string> values = TokenizeLine(line, recordDelimiter, textDelimiter);
+                    
+                    if (values.Count != columns.Count)
+                        throw new Exception(string.Format(Properties.Resources.InvalidFieldCountError, line));
+
+                    string colorName = values[columns["ColorName"]];
+                    string type = values[columns["Type"]];
+                    
+                    if (string.IsNullOrEmpty(colorName) || string.IsNullOrEmpty(type))
+                        continue; //Assume comment
+
+                    int colorCount;
+                    if (!int.TryParse(values[columns["NumOfColors"]], out colorCount))
+                        continue; //Assume comment
+
+                    List<System.Drawing.Color> colors = new List<System.Drawing.Color>();
+
+                    while (!sr.EndOfStream && colorCount > 0)
+                    {
+                        if (!string.IsNullOrEmpty(line))
+                        {
+                            values = TokenizeLine(line, recordDelimiter, textDelimiter);
+                            if (values.Count != colnames.Count)
+                                throw new Exception(string.Format(Properties.Resources.InvalidRecordCountError, line));
+                            
+                            byte r, g, b;
+                            if (!byte.TryParse(values[columns["R"]], out r))
+                                throw new Exception(string.Format(Properties.Resources.InvalidColorComponent, "R", values[columns["R"]], line));
+                            if (!byte.TryParse(values[columns["G"]], out g))
+                                throw new Exception(string.Format(Properties.Resources.InvalidColorComponent, "G", values[columns["G"]], line));
+                            if (!byte.TryParse(values[columns["B"]], out b))
+                                throw new Exception(string.Format(Properties.Resources.InvalidColorComponent, "B", values[columns["B"]], line));
+
+                            colors.Add(System.Drawing.Color.FromArgb(r, g, b));
+                            colorCount--;
+                        }
+
+                        if (colorCount > 0)
+                            line = sr.ReadLine();
+                    }
+
+                    if (colorCount != 0)
+                        throw new Exception(string.Format(Properties.Resources.ColorCountError, colorCount, line));
+
+                    result.Add(new ColorBrewer(colorName, type, colors));
+                }
+
+                return result;
+            }
+        }
+
+        /// <summary>
+        /// Splits a line into record fields, and removes text delimiters
+        /// </summary>
+        /// <param name="line">The line to tokenize</param>
+        /// <param name="recordDelimiter">The character used to delimit the records</param>
+        /// <param name="textDelimiter">The character used to enclose strings</param>
+        /// <returns>A list of records</returns>
+        private static List<string> TokenizeLine(string line, char recordDelimiter, char textDelimiter)
+        {
+            if (string.IsNullOrEmpty(line))
+                return new List<string>();
+
+            bool inQuotes = false;
+            int startIndex = 0;
+            List<string> records = new List<string>();
+
+            for (int i = 0; i < line.Length; i++)
+                if (line[i] == textDelimiter)
+                    inQuotes = !inQuotes;
+                else if (!inQuotes && line[i] == recordDelimiter)
+                {
+                    string rec = line.Substring(startIndex, i - startIndex);
+                    if (rec.StartsWith(textDelimiter.ToString()) && rec.EndsWith(textDelimiter.ToString()))
+                        rec = rec.Substring(1, rec.Length - 2);
+                    records.Add(rec);
+                    startIndex = i+1;
+                }
+
+            if (startIndex <= line.Length)
+            {
+                string rec = line.Substring(startIndex);
+                if (rec.StartsWith(textDelimiter.ToString()) && rec.EndsWith(textDelimiter.ToString()))
+                    rec = rec.Substring(1, rec.Length - 2);
+
+                records.Add(rec);
+            }
+            
+            return records;
+        }
+
+        /// <summary>
+        /// Returns the objects string representation
+        /// </summary>
+        /// <returns>The string the represents the object</returns>
+        public override string ToString()
+        {
+            return m_name + " - " + DisplayType;
+        }
+
+        /// <summary>
+        /// Gets a display friendly version of the display type
+        /// </summary>
+        public string DisplayType
+        {
+            get
+            {
+                switch (m_type)
+                {
+                    case "qual":
+                        return Properties.Resources.QualitativeName;
+                    case "seq":
+                        return Properties.Resources.SequentialName;
+                    case "div":
+                        return Properties.Resources.DivergingName;
+                    default:
+                        return m_type;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Helper class to display ColorBrewer items in a list or combobox
+        /// </summary>
+        public class ColorBrewerListItem
+        {
+            /// <summary>
+            /// Indicates what type of string to use
+            /// </summary>
+            public enum DisplayMode
+            {
+                /// <summary>
+                /// Displays &quot;Group - Name&quot;
+                /// </summary>
+                Full,
+                /// <summary>
+                /// Just display the group
+                /// </summary>
+                Type,
+                /// <summary>
+                /// Just display the set name
+                /// </summary>
+                Set
+            }
+
+            /// <summary>
+            /// A reference to the set
+            /// </summary>
+            private ColorBrewer m_set;
+
+            /// <summary>
+            /// The current display mode
+            /// </summary>
+            private DisplayMode m_mode;
+
+            /// <summary>
+            /// Gets the ColorBrewer set
+            /// </summary>
+            public ColorBrewer Set { get { return m_set; } }
+
+            public ColorBrewerListItem(ColorBrewer set, DisplayMode mode)
+            {
+                m_set = set;
+                m_mode = mode;
+            }
+
+            /// <summary>
+            /// Returns a display version of the item
+            /// </summary>
+            /// <returns></returns>
+            public override string ToString()
+            {
+                if (m_mode == DisplayMode.Type)
+                    return m_set.DisplayType;
+                else if (m_mode == DisplayMode.Set)
+                    return m_set.Name;
+                else
+                    return m_set.ToString();
+            }
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ThemeCreator.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ThemeCreator.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ThemeCreator.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,849 @@
+#region Disclaimer / License
+// Copyright (C) 2009, Kenneth Skovhede
+// http://www.hexad.dk, opensource at hexad.dk
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.MaestroAPI;
+using Maestro.Editors.Common;
+using Ldf = OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using OSGeo.MapGuide.MaestroAPI.Exceptions;
+using OSGeo.MapGuide.MaestroAPI.ObjectModels;
+using Maestro.Editors.LayerDefinition.Vector.StyleEditors;
+using Maestro.Editors.LayerDefinition.Vector.Scales;
+using System.IO;
+
+namespace Maestro.Editors.LayerDefinition.Vector.Thematics
+{
+    public partial class ThemeCreator : Form
+    {
+        private const int PREVIEW_ITEM_BOX_WIDTH = 20;
+        private const int PREVIEW_ITEM_BOX_SPACING = 10;
+
+        private static List<ColorBrewer> m_colorBrewer;
+
+        private IEditorService m_editor;
+        private ILayerDefinition m_layer;
+        private FeatureSourceDescription.FeatureSourceSchema m_schema;
+        private Dictionary<object, long> m_values;
+        private Type m_dataType;
+        
+        private object m_ruleCollection;
+        private object m_defaultItem;
+
+        private static readonly Type[] NUMERIC_TYPES = null;
+
+        private bool m_isUpdating = false;
+
+        private class RuleItem
+        {
+            public string Label;
+            public string Filter;
+            public Color Color;
+
+            public RuleItem(string Filter, string Label, Color Color)
+            {
+                this.Filter = Filter;
+                this.Label = Label;
+                this.Color = Color;
+            }
+        }
+
+        static ThemeCreator ()
+        {
+            NUMERIC_TYPES = new Type[] { typeof(byte), typeof(int), typeof(float), typeof(double) };
+        }
+
+        public ThemeCreator(IEditorService editor, ILayerDefinition layer, FeatureSourceDescription.FeatureSourceSchema schema, object ruleCollection)
+            : this()
+        {
+            m_editor = editor;
+            m_layer = layer;
+            m_schema = schema;
+            m_ruleCollection = ruleCollection;
+
+            ColorBrewerColorSet.SetCustomRender(new CustomCombo.RenderCustomItem(DrawColorSetPreview));
+        }
+
+        private bool DrawColorSetPreview(DrawItemEventArgs args, object o)
+        {
+            if (o is ColorBrewer.ColorBrewerListItem)
+            {
+                ColorBrewer cb = (o as ColorBrewer.ColorBrewerListItem).Set;
+                int maxItems = (args.Bounds.Width - 2) / 10;
+                int items = Math.Min(maxItems, cb.Colors.Count);
+
+                //Make odd number if there are too many
+                if (maxItems < cb.Colors.Count && items % 2 == 0)
+                    items--;
+
+                int itemWidth = args.Bounds.Width / items;
+                int leftOffset = (args.Bounds.Width - (itemWidth * items)) / 2;
+
+                args.DrawBackground();
+
+                for (int i = 0; i < items; i++)
+                {
+                    Rectangle area = new Rectangle(args.Bounds.Left + leftOffset + (i * itemWidth), args.Bounds.Top + 1, itemWidth, args.Bounds.Height - 3); ;
+
+                    if (maxItems < cb.Colors.Count && i == items / 2)
+                    {
+                        RectangleF areaF = new RectangleF(area.X, area.Y, area.Width, area.Height);
+                        System.Drawing.StringFormat sf = new StringFormat();
+                        sf.Alignment = StringAlignment.Center;
+                        using (Brush b = new SolidBrush(ColorBrewerColorSet.ForeColor))
+                            args.Graphics.DrawString("...", ColorBrewerColorSet.Font, b, areaF, sf);
+                    }
+                    else
+                    {
+                        Color c = i < (items / 2) ? cb.Colors[i] : cb.Colors[cb.Colors.Count - (items - i)];
+                        using (Brush b = new SolidBrush(c))
+                            args.Graphics.FillRectangle(b, area);
+                        args.Graphics.DrawRectangle(Pens.Black, area);
+                    }
+
+                }
+
+                if (args.State == DrawItemState.Selected)
+                    args.DrawFocusRectangle();
+
+                return true;
+            }
+            else
+                return false;
+        }
+
+
+        private ThemeCreator()
+        {
+            InitializeComponent();
+
+            GradientFromColor.ResetColors();
+            GradientToColor.ResetColors();
+
+            if (m_colorBrewer == null)
+                m_colorBrewer = ColorBrewer.ParseCSV(GetCsvPath());
+        }
+
+        private string GetCsvPath()
+        {
+            //First test root app path. If not there, try to write a copy from
+            //our embedded resource copy. If that fails, write to a temp file
+            //and return that path
+
+            string path = System.IO.Path.Combine(Application.StartupPath, "ColorBrewer.csv");
+            if (!File.Exists(path))
+            {
+                string content = Properties.Resources.ColorBrewer;
+                try
+                {
+                    File.WriteAllText(path, content);
+                }
+                catch
+                {
+                    path = Path.GetTempFileName();
+                    File.WriteAllText(path, content);
+                }
+            }
+            return path;
+        }
+
+        private void ThemeCreator_Load(object sender, EventArgs e)
+        {
+            GradientFromColor.CurrentColor = Color.Red;
+            GradientToColor.CurrentColor = Color.Green;
+
+            ColumnCombo.Items.Clear();
+            ColumnCombo.Items.Add(Properties.Resources.SelectColumnPlaceholder);
+            ColumnCombo.SelectedIndex = 0;
+
+            foreach (FeatureSetColumn col in m_schema.Columns)
+                if (col.Type == typeof(string) || Array.IndexOf<Type>(NUMERIC_TYPES, col.Type) >= 0) 
+                    ColumnCombo.Items.Add(col.Name);
+        }
+
+        private void ColumnCombo_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (ColumnCombo.SelectedIndex == 0)
+            {
+                //Dummy item selected, just disable the form
+                RuleCountPanel.Enabled =
+                GroupPanel.Enabled =
+                DisplayGroup.Enabled =
+                PreviewGroup.Enabled =
+                OKBtn.Enabled =
+                    false;
+
+            }
+            else
+            {
+                DisplayGroup.Enabled =
+                PreviewGroup.Enabled =
+                OKBtn.Enabled =
+                    true;
+
+                m_values = new Dictionary<object, long>();
+
+                FeatureSetColumn col = null;
+
+                foreach (FeatureSetColumn c in m_schema.Columns)
+                    if (c.Name == ColumnCombo.Text)
+                    {
+                        col = c;
+                        break;
+                    }
+
+                //Not really possible
+                if (col == null)
+                    throw new Exception(Properties.Resources.InvalidColumnNameError);
+
+                string filter = null; //Attempt raw reading initially
+                Exception rawEx = null; //Original exception
+                bool retry = true;
+
+                while (retry)
+                {
+                    retry = false;
+                    try
+                    {
+                        IVectorLayerDefinition vl = (IVectorLayerDefinition)m_layer.SubLayer;
+                        using (FeatureSetReader rd = m_editor.FeatureService.QueryFeatureSource(vl.FeatureSourceID, m_schema.Fullname, filter, new string[] { col.Name }))
+                        {
+                            while (rd.Read() && m_values.Count < 100000) //No more than 100.000 records in memory
+                            {
+                                if (!rd.Row.IsValueNull(col.Name))
+                                {
+                                    object value = rd.Row[col.Name];
+                                    if (!m_values.ContainsKey(value))
+                                        m_values.Add(value, 0);
+
+                                    m_values[value]++;
+                                }
+                            }
+                        }
+
+                        rawEx = null; //Clear error
+
+                    }
+                    catch (Exception ex)
+                    {
+                        rawEx = ex;
+                        if (filter == null && ex.Message.IndexOf("MgNullPropertyValueException") >= 0) //Known issue
+                        {
+                            retry = true;
+                            filter = "NOT " + col.Name + " NULL";
+                        }
+                    }
+                }
+
+                if (rawEx != null)
+                {
+                    MessageBox.Show(this, string.Format(Properties.Resources.DataReadError, rawEx.Message), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
+                    ColumnCombo.SelectedIndex = 0;
+                    return;
+                }
+
+                if (m_values.Count == 0)
+                {
+                    MessageBox.Show(this, Properties.Resources.ColumnHasNoValidDataError, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
+                    ColumnCombo.SelectedIndex = 0;
+                    return;
+                }
+
+                m_dataType = col.Type;
+
+                if (Array.IndexOf<Type>(NUMERIC_TYPES, col.Type) >= 0)
+                {
+                    if (m_values.Count >= 100000)
+                        MessageBox.Show(this, string.Format(Properties.Resources.TooMuchDataWarning, 100000), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
+
+                    GroupPanel.Enabled = true;
+                    RuleCountPanel.Enabled = true;
+                    RuleCount.Minimum = 3;
+
+                    if (m_values.Count <= 9)
+                    {
+                        AggregateCombo.SelectedIndex = AggregateCombo.Items.Count - 1;
+                        AggregateCombo_SelectedIndexChanged(sender, e);
+
+                        RefreshColorBrewerSet();
+                    }
+                    else
+                    {
+                        RuleCount.Value = 6;
+                        if (!GradientColors.Checked)
+                            ColorBrewerColors.Checked = true;
+
+                        if (AggregateCombo.SelectedIndex < 0)
+                            AggregateCombo.SelectedIndex = 0;
+                        if (AggregateCombo.SelectedIndex == AggregateCombo.Items.Count - 1)
+                            AggregateCombo.SelectedIndex = 0;
+                    }
+
+                }
+                else //String type
+                {
+                    if (m_values.Count > 100)
+                    {
+                        MessageBox.Show(this, string.Format(Properties.Resources.TooManyValuesError, 100), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
+                        ColumnCombo.SelectedIndex = 0;
+                        return;
+                    }
+
+                    RuleCountPanel.Enabled = 
+                    GroupPanel.Enabled = 
+                        false;
+
+                    RuleCount.Minimum = 0;
+
+                    //Select "Individual"
+                    AggregateCombo.SelectedIndex = AggregateCombo.Items.Count - 1;
+                    RuleCount.Value = m_values.Count;
+                    GradientColors.Checked = true;
+
+                    DisplayGroup.Enabled =
+                    PreviewGroup.Enabled =
+                    OKBtn.Enabled =
+                        true;
+                }
+
+                RefreshColorBrewerSet();
+                RefreshPreview();
+            }
+        }
+
+        private void RefreshColorBrewerSet()
+        {
+            try
+            {
+                m_isUpdating = true;
+                string prevType = ColorBrewerDataType.Text;
+                ColorBrewerDataType.Items.Clear();
+
+                foreach (ColorBrewer cb in m_colorBrewer)
+                    if (cb.Colors.Count == RuleCount.Value)
+                        if (ColorBrewerDataType.FindString(cb.DisplayType) < 0)
+                            ColorBrewerDataType.Items.Add(cb.DisplayType);
+
+                if (ColorBrewerDataType.FindString(prevType) >= 0)
+                    ColorBrewerDataType.SelectedIndex = ColorBrewerDataType.FindString(prevType);
+                else if (ColorBrewerDataType.Items.Count > 0)
+                    ColorBrewerDataType.SelectedIndex = 0;
+
+                if (ColorBrewerDataType.Items.Count == 0)
+                {
+                    GradientColors.Checked = true;
+                    ColorBrewerColors.Enabled = ColorBrewerLabel.Enabled = ColorBrewerPanel.Enabled = false;
+                }
+                else
+                {
+                    ColorBrewerColors.Enabled = ColorBrewerLabel.Enabled = ColorBrewerPanel.Enabled = true;
+                    if (!GradientColors.Checked)
+                        ColorBrewerColors.Checked = true;
+                }
+            }
+            finally
+            {
+                m_isUpdating = false;
+            }
+        }
+
+        private List<RuleItem> CalculateRuleSet()
+        {
+            Color[] colors = BuildColorSet(false);
+            List<RuleItem> result = new List<RuleItem>();
+
+            if (AggregateCombo.SelectedIndex == 0 || AggregateCombo.SelectedIndex == 1 || AggregateCombo.SelectedIndex == 2)
+            {
+                double min = double.MaxValue;
+                double max = double.MinValue;
+                double mean = 0;
+                long count = 0;
+                foreach (KeyValuePair<object, long> entry in m_values)
+                {
+                    double value = Convert.ToDouble(entry.Key);
+                    min = Math.Min(value, min);
+                    max = Math.Max(value, max);
+                    mean += value * entry.Value;
+                    count += entry.Value;
+                }
+
+                mean /= count;
+
+                if (AggregateCombo.SelectedIndex == 0) //Equal
+                {
+                    double chunksize = (max - min) / colors.Length;
+                    result.Add(new RuleItem(
+                        string.Format(System.Globalization.CultureInfo.InvariantCulture, "\"{0}\" <= {1}", ColumnCombo.Text, FormatValue(chunksize + min)),
+                        string.Format(System.Globalization.CultureInfo.InvariantCulture, Properties.Resources.LessThanLabel, FormatValue(chunksize + min)), 
+                        colors[0]));
+
+                    for (int i = 1; i < colors.Length - 1; i++)
+                        result.Add(new RuleItem(
+                            string.Format(System.Globalization.CultureInfo.InvariantCulture, "\"{0}\" > {1} AND \"{0}\" <= {2}", ColumnCombo.Text, FormatValue(min + (i * chunksize)), FormatValue(min + ((i + 1) * chunksize))),
+                            string.Format(System.Globalization.CultureInfo.InvariantCulture, Properties.Resources.BetweenLabel, FormatValue(min + (i * chunksize)), FormatValue(min + ((i + 1) * chunksize))),
+                            colors[i]));
+
+                    result.Add(new RuleItem(
+                        string.Format(System.Globalization.CultureInfo.InvariantCulture, "\"{0}\" > {1}", ColumnCombo.Text, FormatValue(max - chunksize)),
+                        string.Format(System.Globalization.CultureInfo.InvariantCulture, Properties.Resources.MoreThanLabel, FormatValue(max - chunksize)), 
+                        colors[colors.Length - 1]));
+                }
+                else if (AggregateCombo.SelectedIndex == 1) //Standard Deviation
+                {
+                    double dev = 0;
+                    foreach (KeyValuePair<object, long> entry in m_values)
+                        dev += ((Convert.ToDouble(entry.Key) - mean) * (Convert.ToDouble(entry.Key) - mean)) * entry.Value;
+
+                    dev /= count;
+                    dev = Math.Sqrt(dev);
+
+                    double span = (dev * (colors.Length / 2));
+                    double lower = mean < span ? span - mean : mean - span;
+
+                    if (colors.Length % 2 == 1)
+                        lower += dev / 2; //The middle item goes half an alpha to each side
+
+                    result.Add(new RuleItem(
+                        string.Format(System.Globalization.CultureInfo.InvariantCulture, "\"{0}\" < {1}", ColumnCombo.Text, FormatValue(lower + dev)),
+                        string.Format(System.Globalization.CultureInfo.InvariantCulture, Properties.Resources.LessThanLabel, FormatValue(lower + dev)),
+                        colors[0]));
+
+                    for (int i = 1; i < colors.Length - 1; i++)
+                        result.Add(new RuleItem(
+                            string.Format(System.Globalization.CultureInfo.InvariantCulture, "\"{0}\" >= {1} AND \"{0}\" < {2}", ColumnCombo.Text, FormatValue(lower + (i * dev)), FormatValue(lower + ((i + 1) * dev))),
+                            string.Format(System.Globalization.CultureInfo.InvariantCulture, Properties.Resources.BetweenLabel, FormatValue(lower + (i * dev)), FormatValue(lower + ((i + 1) * dev))),
+                            colors[i]));
+
+                    result.Add(new RuleItem(
+                        string.Format(System.Globalization.CultureInfo.InvariantCulture, "\"{0}\" >= {1}", ColumnCombo.Text, FormatValue(lower + (dev * (colors.Length - 1)))),
+                        string.Format(System.Globalization.CultureInfo.InvariantCulture, Properties.Resources.MoreThanLabel, FormatValue(lower + (dev * (colors.Length - 1)))),
+                        colors[colors.Length - 1]));
+
+                }
+                else if (AggregateCombo.SelectedIndex == 2) //Quantile
+                {
+                    SortedDictionary<double, long> sort = new SortedDictionary<double, long>();
+                    foreach (KeyValuePair<object, long> entry in m_values)
+                        sort.Add(Convert.ToDouble(entry.Key), entry.Value);
+
+                    double step = (1.0 / colors.Length) * count;
+                    List<double> separators = new List<double>();
+                    for(int i = 1; i < colors.Length; i++)
+                    {
+                        long limit = (long)Math.Round(step * i);
+                        long cc = 0;
+                        double item = double.NaN;
+
+                        foreach(KeyValuePair<double, long> entry in sort)
+                        {
+                            item = entry.Key;
+                            cc += entry.Value;
+                            if (cc >= limit)
+                                break;
+                        }
+
+                        separators.Add(item);
+                    }
+
+                    result.Add(new RuleItem(
+                        string.Format(System.Globalization.CultureInfo.InvariantCulture, "\"{0}\" <= {1}", ColumnCombo.Text, FormatValue(separators[0])),
+                        string.Format(System.Globalization.CultureInfo.InvariantCulture, Properties.Resources.LessThanLabel, FormatValue(separators[0])),
+                        colors[0]));
+
+                    for (int i = 1; i < colors.Length - 1; i++)
+                        result.Add(new RuleItem(
+                            string.Format(System.Globalization.CultureInfo.InvariantCulture, "\"{0}\" > {1} AND \"{0}\" <= {2}", ColumnCombo.Text, FormatValue(separators[i - 1]), FormatValue(separators[i])),
+                            string.Format(System.Globalization.CultureInfo.InvariantCulture, Properties.Resources.BetweenLabel, FormatValue(separators[i - 1]), FormatValue(separators[i])),
+                            colors[i]));
+
+                    result.Add(new RuleItem(
+                        string.Format(System.Globalization.CultureInfo.InvariantCulture, "\"{0}\" > {1}", ColumnCombo.Text, FormatValue(separators[separators.Count - 1])),
+                        string.Format(System.Globalization.CultureInfo.InvariantCulture, Properties.Resources.MoreThanLabel, FormatValue(separators[separators.Count - 1])),
+                        colors[colors.Length - 1]));
+                }
+            }
+            else if (AggregateCombo.SelectedIndex == 3) //Individual
+            {
+                List<object> items = new List<object>(m_values.Keys);
+                items.Sort(); //Handles types correctly
+
+                for (int i = 0; i < colors.Length; i++)
+                    if (items[i] is string)
+                        result.Add(new RuleItem(
+                            string.Format(System.Globalization.CultureInfo.InvariantCulture, "\"{0}\" = '{1}'", ColumnCombo.Text, items[i]),
+                            string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}", items[i]), 
+                            colors[i]));
+                    else
+                        result.Add(new RuleItem(
+                            string.Format(System.Globalization.CultureInfo.InvariantCulture, "\"{0}\" = {1}", ColumnCombo.Text, items[i]),
+                            string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}", items[i]), 
+                            colors[i])); 
+
+            }
+
+
+            return result;
+        }
+
+        private string FormatValue(double value)
+        {
+            if (m_dataType == typeof(double) || m_dataType == typeof(float))
+                return string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}", value);
+            else
+                return string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}", (long)Math.Round(value));
+        }
+
+        /// <summary>
+        /// Redraws the preview image
+        /// </summary>
+        private void RefreshPreview()
+        {
+            //TODO: More efficitent to use the "onpaint" event
+            Bitmap bmp = new Bitmap(PreviewPicture.Width, PreviewPicture.Height);
+            using (Graphics g = Graphics.FromImage(bmp))
+            {
+
+                List<Color?> colors = new List<Color?>();
+                Color[] actualColors = BuildColorSet(true);
+                if (actualColors.Length > 0)
+                {
+
+                    int num_boxes = (bmp.Width - PREVIEW_ITEM_BOX_SPACING) / (PREVIEW_ITEM_BOX_WIDTH + PREVIEW_ITEM_BOX_SPACING);
+                    if (actualColors.Length > num_boxes)
+                    {
+                        if (num_boxes % 2 == 0)
+                            num_boxes--;
+
+                        int real = ((num_boxes - 1) / 2);
+                        for (int i = 0; i < actualColors.Length; i++)
+                            if (i < real || (actualColors.Length - i) <= real)
+                                colors.Add(actualColors[i]);
+
+                        colors.Insert(real, null);
+                    }
+                    else
+                    {
+                        for (int i = 0; i < actualColors.Length; i++)
+                            colors.Add(actualColors[i]);
+                        num_boxes = colors.Count;
+                    }
+
+                    int spacing = ((bmp.Width - PREVIEW_ITEM_BOX_SPACING) - (PREVIEW_ITEM_BOX_WIDTH * num_boxes)) / num_boxes;
+                    int fullwidth = (spacing * (num_boxes - 1)) + (PREVIEW_ITEM_BOX_WIDTH * num_boxes);
+                    int x = (bmp.Width - fullwidth) / 2;
+
+                    int topy = bmp.Height / 4;
+                    int height = topy * 2;
+
+
+                    foreach (Color? c in colors)
+                    {
+                        if (!c.HasValue)
+                            g.DrawString("...", new Font(FontFamily.GenericSansSerif, 12), Brushes.Black, x, topy);
+                        else
+                        {
+                            g.DrawRectangle(Pens.Black, x, topy, PREVIEW_ITEM_BOX_WIDTH, height);
+                            using (Brush b = new SolidBrush(c.Value))
+                                g.FillRectangle(b, x, topy, PREVIEW_ITEM_BOX_WIDTH, height);
+                        }
+                        x += spacing + PREVIEW_ITEM_BOX_WIDTH;
+                    }
+                }
+            }
+
+            System.Drawing.Image prevImage = PreviewPicture.Image;
+            PreviewPicture.Image = bmp;
+            if (prevImage != null)
+                prevImage.Dispose();
+        }
+
+        /// <summary>
+        /// Constructs the list of colors, based on the current selection
+        /// </summary>
+        /// <param name="forPreview">A value indicating if the color set is for preview use, which will put an upper limit on the number of generated colors</param>
+        /// <returns>A list of colors matching the user selection</returns>
+        private Color[] BuildColorSet(bool forPreview)
+        {
+            Color[] res = new Color[forPreview ? Math.Min((int)RuleCount.Value, 100) : (AggregateCombo.SelectedIndex == AggregateCombo.Items.Count - 1 ? m_values.Count : (int)RuleCount.Value)];
+
+            if (GradientColors.Checked)
+            {
+                double stepR, stepG, stepB;
+                stepR = (GradientToColor.CurrentColor.R - GradientFromColor.CurrentColor.R) / (double)res.Length;
+                stepG = (GradientToColor.CurrentColor.G - GradientFromColor.CurrentColor.G) / (double)res.Length;
+                stepB = (GradientToColor.CurrentColor.B - GradientFromColor.CurrentColor.B) / (double)res.Length;
+
+                Color startColor = GradientFromColor.CurrentColor;
+
+                for (int i = 0; i < res.Length; i++)
+                    res[i] = Color.FromArgb(
+                        Math.Min(255, Math.Max(0, (int)(startColor.R + Math.Round(i * stepR)))),
+                        Math.Min(255, Math.Max(0, (int)(startColor.G + Math.Round(i * stepG)))),
+                        Math.Min(255, Math.Max(0, (int)(startColor.B + Math.Round(i * stepB))))
+                    );
+
+            }
+            else
+            {
+                if (ColorBrewerColorSet.SelectedItem == null)
+                    return new Color[0];
+
+                ColorBrewer c = ((ColorBrewer.ColorBrewerListItem)ColorBrewerColorSet.SelectedItem).Set;
+                if (c == null)
+                    return new Color[0];
+
+                for (int i = 0; i < res.Length; i++)
+                    res[i] = c.Colors[i];
+            }
+
+            return res;
+        }
+
+        private void RuleCount_ValueChanged(object sender, EventArgs e)
+        {
+            RefreshColorBrewerSet();
+            RefreshPreview();
+        }
+
+        private void AggregateCombo_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (AggregateCombo.SelectedIndex == AggregateCombo.Items.Count - 1)
+            {
+                if (m_values.Count > 100)
+                {
+                    MessageBox.Show(this, string.Format(Properties.Resources.TooManyIndiviualValuesError, 100), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
+                    AggregateCombo.SelectedIndex = 0;
+                    return;
+                }
+
+                RuleCount.Value = Math.Max(m_values.Count, RuleCount.Minimum);
+                if (!GradientColors.Checked && ColorBrewerColors.Enabled)
+                    ColorBrewerColors.Checked = true;
+                else
+                    GradientColors.Checked = true;
+
+                RuleCountPanel.Enabled = false;
+                RuleCount.Minimum = 0;
+            }
+            else if (AggregateCombo.Enabled)
+            {
+                RuleCountPanel.Enabled = true;
+                RuleCount.Minimum = 3;
+            }
+
+
+            RefreshPreview();
+        }
+
+        private void GradientColors_CheckedChanged(object sender, EventArgs e)
+        {
+            RefreshPreview();
+        }
+
+        private void ColorBrewerColors_CheckedChanged(object sender, EventArgs e)
+        {
+            RefreshPreview();
+        }
+
+        private void ColorBrewerColorSet_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (!m_isUpdating && ColorBrewerColorSet.SelectedIndex >= 0)
+                ColorBrewerColors.Checked = true;
+
+            RefreshPreview();
+        }
+
+        private void OKBtn_Click(object sender, EventArgs e)
+        {
+            try
+            {
+                List<RuleItem> rules = CalculateRuleSet();
+
+                if (rules.Count > 1000)
+                {
+                    if (MessageBox.Show(this, Properties.Resources.TooManyRulesWarning, Application.ProductName, MessageBoxButtons.YesNoCancel) != DialogResult.Yes)
+                        return;
+                }
+
+                if (m_ruleCollection is PointTypeStyleType)
+                {
+                    PointTypeStyleType col = m_ruleCollection as PointTypeStyleType;
+
+                    if (OverwriteRules.Checked)
+                        col.PointRule.Clear();
+
+                    foreach (RuleItem entry in rules)
+                    {
+                        PointRuleType r = ObjectFactory.CreatePointRule();
+                        r.Filter = entry.Filter;
+                        r.LegendLabel = entry.Label;
+                        if (r.Item.Item is MarkSymbolType)
+                        {
+                            ((MarkSymbolType)r.Item.Item).Fill.ForegroundColor = Utility.SerializeHTMLColor(entry.Color, true);
+                        }
+                        else if (r.Item.Item is FontSymbolType)
+                        {
+                            ((FontSymbolType)r.Item.Item).ForegroundColor = Utility.SerializeHTMLColor(entry.Color, true);
+                        }
+
+                        col.PointRule.Add(r);
+                    }
+                }
+                else if (m_ruleCollection is LineTypeStyleType)
+                {
+                    LineTypeStyleType col = m_ruleCollection as LineTypeStyleType;
+
+                    if (OverwriteRules.Checked)
+                        col.LineRule.Clear();
+
+                    foreach (RuleItem entry in rules)
+                    {
+                        LineRuleType l = ObjectFactory.CreateLineRule();
+                        l.Filter = entry.Filter;
+                        l.LegendLabel = entry.Label;
+                        l.Items[0].Color = Utility.SerializeHTMLColor(entry.Color, true);
+
+                        col.LineRule.Add(l);
+                    }
+                }
+                else if (m_ruleCollection is AreaTypeStyleType)
+                {
+                    AreaTypeStyleType col = m_ruleCollection as AreaTypeStyleType;
+
+                    if (OverwriteRules.Checked)
+                        col.AreaRule.Clear();
+
+                    foreach (RuleItem entry in rules)
+                    {
+                        AreaRuleType r = ObjectFactory.CreateAreaRule();
+                        r.Filter = entry.Filter;
+                        r.LegendLabel = entry.Label;
+                        r.Item.Fill.ForegroundColor = Utility.SerializeHTMLColor(entry.Color, true);
+                        col.AreaRule.Add(r);
+                    }
+                }
+
+                this.DialogResult = DialogResult.OK;
+                this.Close();
+            }
+            catch(Exception ex)
+            {
+                string msg = NestedExceptionMessageProcessor.GetFullMessage(ex);
+                //m_editor.SetLastException(ex);
+                MessageBox.Show(this, string.Format(Properties.Resources.GenericError, msg), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); 
+            }
+        }
+
+        private void CancelBtn_Click(object sender, EventArgs e)
+        {
+            this.DialogResult = DialogResult.Cancel;
+            this.Close();
+        }
+
+        private void GradientFromColor_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (!m_isUpdating)
+                GradientColors.Checked = true;
+            RefreshPreview();
+        }
+
+        private void GradientToColor_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (!m_isUpdating)
+                GradientColors.Checked = true;
+            RefreshPreview();
+        }
+
+        private void ChangeBaseStyleBtn_Click(object sender, EventArgs e)
+        {
+            IVectorLayerDefinition vl = (IVectorLayerDefinition)m_layer.SubLayer;
+            UserControl uc = null;
+            if (m_ruleCollection is PointTypeStyleType)
+            {
+                uc = new PointFeatureStyleEditor(m_editor, m_schema, vl.FeatureSourceID);
+                ((PointFeatureStyleEditor)uc).Item = (PointSymbolization2DType)Utility.XmlDeepCopy(m_defaultItem);
+                ((PointFeatureStyleEditor)uc).SetupForTheming();
+            }
+            else if (m_ruleCollection is LineTypeStyleType)
+            {
+                uc = new LineFeatureStyleEditor(m_editor, m_schema, vl.FeatureSourceID);
+                var rule = ObjectFactory.CreateLineRule();
+                ((LineFeatureStyleEditor)uc).Item = rule.Items;
+                ((LineFeatureStyleEditor)uc).SetupForTheming();
+            }
+            else if (m_ruleCollection is AreaTypeStyleType)
+            {
+                uc = new AreaFeatureStyleEditor(m_editor, m_schema, vl.FeatureSourceID);
+                ((AreaFeatureStyleEditor)uc).Item = (AreaSymbolizationFillType)Utility.XmlDeepCopy(m_defaultItem);
+                ((AreaFeatureStyleEditor)uc).SetupForTheming();
+            }
+
+            if (uc != null)
+            {
+                EditorTemplateForm dlg = new EditorTemplateForm();
+                dlg.ItemPanel.Controls.Add(uc);
+                uc.Dock = DockStyle.Fill;
+                dlg.RefreshSize();
+
+                if (dlg.ShowDialog(this) == DialogResult.OK)
+                {
+                    if (m_ruleCollection is PointTypeStyleType)
+                        m_defaultItem = ((PointFeatureStyleEditor)uc).Item;
+                    else if (m_ruleCollection is LineTypeStyleType)
+                        m_defaultItem = ((LineFeatureStyleEditor)uc).Item;
+                    else if (m_ruleCollection is AreaTypeStyleType)
+                        m_defaultItem = ((AreaFeatureStyleEditor)uc).Item;
+                }
+            }
+
+        }
+
+        private void ColorBrewerDataType_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            string prevSet = ColorBrewerColorSet.Text;
+            ColorBrewerColorSet.Items.Clear();
+
+            foreach (ColorBrewer cb in m_colorBrewer)
+                if (cb.Colors.Count == RuleCount.Value && cb.DisplayType == ColorBrewerDataType.Text)
+                    ColorBrewerColorSet.Items.Add(new ColorBrewer.ColorBrewerListItem(cb, ColorBrewer.ColorBrewerListItem.DisplayMode.Set));
+
+            if (ColorBrewerColorSet.FindString(prevSet) >= 0)
+                ColorBrewerColorSet.SelectedIndex = ColorBrewerColorSet.FindString(prevSet);
+            else if (ColorBrewerColorSet.Items.Count > 0)
+                ColorBrewerColorSet.SelectedIndex = 0;
+
+            if (!m_isUpdating)
+                ColorBrewerColors.Checked = true;
+
+            RefreshPreview();
+        }
+
+        private void ColorBrewerLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+        {
+            m_editor.OpenUrl("http://colorbrewer.org/");
+        }
+
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ThemeCreator.designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ThemeCreator.designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ThemeCreator.designer.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,367 @@
+using Maestro.Editors.Common;
+namespace Maestro.Editors.LayerDefinition.Vector.Thematics
+{
+    partial class ThemeCreator
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ThemeCreator));
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.AggregateLabel = new System.Windows.Forms.Label();
+            this.OverwriteRules = new System.Windows.Forms.RadioButton();
+            this.AppendRules = new System.Windows.Forms.RadioButton();
+            this.ColumnCombo = new System.Windows.Forms.ComboBox();
+            this.RuleCount = new System.Windows.Forms.NumericUpDown();
+            this.AggregateCombo = new System.Windows.Forms.ComboBox();
+            this.DataGroup = new System.Windows.Forms.GroupBox();
+            this.GroupPanel = new System.Windows.Forms.Panel();
+            this.RuleCountPanel = new System.Windows.Forms.Panel();
+            this.DisplayGroup = new System.Windows.Forms.GroupBox();
+            this.ColorBrewerPanel = new System.Windows.Forms.Panel();
+            this.label3 = new System.Windows.Forms.Label();
+            this.ColorBrewerDataType = new System.Windows.Forms.ComboBox();
+            this.ColorBrewerColorSet = new CustomCombo();
+            this.ColorBrewerLabel = new System.Windows.Forms.LinkLabel();
+            this.panel2 = new System.Windows.Forms.Panel();
+            this.GradientToColor = new ColorComboBox();
+            this.GradientFromColor = new ColorComboBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.ChangeBaseStyleBtn = new System.Windows.Forms.Button();
+            this.ColorBrewerColors = new System.Windows.Forms.RadioButton();
+            this.GradientColors = new System.Windows.Forms.RadioButton();
+            this.PreviewGroup = new System.Windows.Forms.GroupBox();
+            this.PreviewPicture = new System.Windows.Forms.PictureBox();
+            this.ButtonPanel = new System.Windows.Forms.Panel();
+            this.CancelBtn = new System.Windows.Forms.Button();
+            this.OKBtn = new System.Windows.Forms.Button();
+            this.colorComboBox1 = new ColorComboBox();
+            ((System.ComponentModel.ISupportInitialize)(this.RuleCount)).BeginInit();
+            this.DataGroup.SuspendLayout();
+            this.GroupPanel.SuspendLayout();
+            this.RuleCountPanel.SuspendLayout();
+            this.DisplayGroup.SuspendLayout();
+            this.ColorBrewerPanel.SuspendLayout();
+            this.panel2.SuspendLayout();
+            this.PreviewGroup.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.PreviewPicture)).BeginInit();
+            this.ButtonPanel.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            resources.ApplyResources(this.label1, "label1");
+            this.label1.Name = "label1";
+            // 
+            // label2
+            // 
+            resources.ApplyResources(this.label2, "label2");
+            this.label2.Name = "label2";
+            // 
+            // AggregateLabel
+            // 
+            resources.ApplyResources(this.AggregateLabel, "AggregateLabel");
+            this.AggregateLabel.Name = "AggregateLabel";
+            // 
+            // OverwriteRules
+            // 
+            resources.ApplyResources(this.OverwriteRules, "OverwriteRules");
+            this.OverwriteRules.Checked = true;
+            this.OverwriteRules.Name = "OverwriteRules";
+            this.OverwriteRules.TabStop = true;
+            this.OverwriteRules.UseVisualStyleBackColor = true;
+            // 
+            // AppendRules
+            // 
+            resources.ApplyResources(this.AppendRules, "AppendRules");
+            this.AppendRules.Name = "AppendRules";
+            this.AppendRules.UseVisualStyleBackColor = true;
+            // 
+            // ColumnCombo
+            // 
+            resources.ApplyResources(this.ColumnCombo, "ColumnCombo");
+            this.ColumnCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.ColumnCombo.FormattingEnabled = true;
+            this.ColumnCombo.Name = "ColumnCombo";
+            this.ColumnCombo.SelectedIndexChanged += new System.EventHandler(this.ColumnCombo_SelectedIndexChanged);
+            // 
+            // RuleCount
+            // 
+            resources.ApplyResources(this.RuleCount, "RuleCount");
+            this.RuleCount.Minimum = new decimal(new int[] {
+            3,
+            0,
+            0,
+            0});
+            this.RuleCount.Name = "RuleCount";
+            this.RuleCount.Value = new decimal(new int[] {
+            3,
+            0,
+            0,
+            0});
+            this.RuleCount.ValueChanged += new System.EventHandler(this.RuleCount_ValueChanged);
+            // 
+            // AggregateCombo
+            // 
+            resources.ApplyResources(this.AggregateCombo, "AggregateCombo");
+            this.AggregateCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.AggregateCombo.FormattingEnabled = true;
+            this.AggregateCombo.Items.AddRange(new object[] {
+            resources.GetString("AggregateCombo.Items"),
+            resources.GetString("AggregateCombo.Items1"),
+            resources.GetString("AggregateCombo.Items2"),
+            resources.GetString("AggregateCombo.Items3")});
+            this.AggregateCombo.Name = "AggregateCombo";
+            this.AggregateCombo.SelectedIndexChanged += new System.EventHandler(this.AggregateCombo_SelectedIndexChanged);
+            // 
+            // DataGroup
+            // 
+            resources.ApplyResources(this.DataGroup, "DataGroup");
+            this.DataGroup.Controls.Add(this.GroupPanel);
+            this.DataGroup.Controls.Add(this.RuleCountPanel);
+            this.DataGroup.Controls.Add(this.ColumnCombo);
+            this.DataGroup.Controls.Add(this.AppendRules);
+            this.DataGroup.Controls.Add(this.OverwriteRules);
+            this.DataGroup.Controls.Add(this.label1);
+            this.DataGroup.Name = "DataGroup";
+            this.DataGroup.TabStop = false;
+            // 
+            // GroupPanel
+            // 
+            this.GroupPanel.Controls.Add(this.AggregateLabel);
+            this.GroupPanel.Controls.Add(this.AggregateCombo);
+            resources.ApplyResources(this.GroupPanel, "GroupPanel");
+            this.GroupPanel.Name = "GroupPanel";
+            // 
+            // RuleCountPanel
+            // 
+            resources.ApplyResources(this.RuleCountPanel, "RuleCountPanel");
+            this.RuleCountPanel.Controls.Add(this.RuleCount);
+            this.RuleCountPanel.Controls.Add(this.label2);
+            this.RuleCountPanel.Name = "RuleCountPanel";
+            // 
+            // DisplayGroup
+            // 
+            resources.ApplyResources(this.DisplayGroup, "DisplayGroup");
+            this.DisplayGroup.Controls.Add(this.ColorBrewerPanel);
+            this.DisplayGroup.Controls.Add(this.ColorBrewerLabel);
+            this.DisplayGroup.Controls.Add(this.panel2);
+            this.DisplayGroup.Controls.Add(this.ChangeBaseStyleBtn);
+            this.DisplayGroup.Controls.Add(this.ColorBrewerColors);
+            this.DisplayGroup.Controls.Add(this.GradientColors);
+            this.DisplayGroup.Name = "DisplayGroup";
+            this.DisplayGroup.TabStop = false;
+            // 
+            // ColorBrewerPanel
+            // 
+            this.ColorBrewerPanel.Controls.Add(this.label3);
+            this.ColorBrewerPanel.Controls.Add(this.ColorBrewerDataType);
+            this.ColorBrewerPanel.Controls.Add(this.ColorBrewerColorSet);
+            resources.ApplyResources(this.ColorBrewerPanel, "ColorBrewerPanel");
+            this.ColorBrewerPanel.Name = "ColorBrewerPanel";
+            // 
+            // label3
+            // 
+            resources.ApplyResources(this.label3, "label3");
+            this.label3.Name = "label3";
+            // 
+            // ColorBrewerDataType
+            // 
+            this.ColorBrewerDataType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.ColorBrewerDataType.FormattingEnabled = true;
+            resources.ApplyResources(this.ColorBrewerDataType, "ColorBrewerDataType");
+            this.ColorBrewerDataType.Name = "ColorBrewerDataType";
+            this.ColorBrewerDataType.SelectedIndexChanged += new System.EventHandler(this.ColorBrewerDataType_SelectedIndexChanged);
+            // 
+            // ColorBrewerColorSet
+            // 
+            this.ColorBrewerColorSet.DropDownWidth = 150;
+            this.ColorBrewerColorSet.FormattingEnabled = true;
+            resources.ApplyResources(this.ColorBrewerColorSet, "ColorBrewerColorSet");
+            this.ColorBrewerColorSet.Name = "ColorBrewerColorSet";
+            this.ColorBrewerColorSet.SelectedIndexChanged += new System.EventHandler(this.ColorBrewerColorSet_SelectedIndexChanged);
+            // 
+            // ColorBrewerLabel
+            // 
+            resources.ApplyResources(this.ColorBrewerLabel, "ColorBrewerLabel");
+            this.ColorBrewerLabel.Name = "ColorBrewerLabel";
+            this.ColorBrewerLabel.TabStop = true;
+            this.ColorBrewerLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ColorBrewerLabel_LinkClicked);
+            // 
+            // panel2
+            // 
+            this.panel2.Controls.Add(this.GradientToColor);
+            this.panel2.Controls.Add(this.GradientFromColor);
+            this.panel2.Controls.Add(this.label4);
+            resources.ApplyResources(this.panel2, "panel2");
+            this.panel2.Name = "panel2";
+            // 
+            // GradientToColor
+            // 
+            this.GradientToColor.FormattingEnabled = true;
+            resources.ApplyResources(this.GradientToColor, "GradientToColor");
+            this.GradientToColor.Name = "GradientToColor";
+            this.GradientToColor.SelectedIndexChanged += new System.EventHandler(this.GradientToColor_SelectedIndexChanged);
+            // 
+            // GradientFromColor
+            // 
+            this.GradientFromColor.FormattingEnabled = true;
+            resources.ApplyResources(this.GradientFromColor, "GradientFromColor");
+            this.GradientFromColor.Name = "GradientFromColor";
+            this.GradientFromColor.SelectedIndexChanged += new System.EventHandler(this.GradientFromColor_SelectedIndexChanged);
+            // 
+            // label4
+            // 
+            resources.ApplyResources(this.label4, "label4");
+            this.label4.Name = "label4";
+            // 
+            // ChangeBaseStyleBtn
+            // 
+            resources.ApplyResources(this.ChangeBaseStyleBtn, "ChangeBaseStyleBtn");
+            this.ChangeBaseStyleBtn.Name = "ChangeBaseStyleBtn";
+            this.ChangeBaseStyleBtn.UseVisualStyleBackColor = true;
+            this.ChangeBaseStyleBtn.Click += new System.EventHandler(this.ChangeBaseStyleBtn_Click);
+            // 
+            // ColorBrewerColors
+            // 
+            resources.ApplyResources(this.ColorBrewerColors, "ColorBrewerColors");
+            this.ColorBrewerColors.Name = "ColorBrewerColors";
+            this.ColorBrewerColors.TabStop = true;
+            this.ColorBrewerColors.UseVisualStyleBackColor = true;
+            this.ColorBrewerColors.CheckedChanged += new System.EventHandler(this.ColorBrewerColors_CheckedChanged);
+            // 
+            // GradientColors
+            // 
+            resources.ApplyResources(this.GradientColors, "GradientColors");
+            this.GradientColors.Name = "GradientColors";
+            this.GradientColors.TabStop = true;
+            this.GradientColors.UseVisualStyleBackColor = true;
+            this.GradientColors.CheckedChanged += new System.EventHandler(this.GradientColors_CheckedChanged);
+            // 
+            // PreviewGroup
+            // 
+            resources.ApplyResources(this.PreviewGroup, "PreviewGroup");
+            this.PreviewGroup.Controls.Add(this.PreviewPicture);
+            this.PreviewGroup.Name = "PreviewGroup";
+            this.PreviewGroup.TabStop = false;
+            // 
+            // PreviewPicture
+            // 
+            resources.ApplyResources(this.PreviewPicture, "PreviewPicture");
+            this.PreviewPicture.Name = "PreviewPicture";
+            this.PreviewPicture.TabStop = false;
+            // 
+            // ButtonPanel
+            // 
+            this.ButtonPanel.Controls.Add(this.CancelBtn);
+            this.ButtonPanel.Controls.Add(this.OKBtn);
+            resources.ApplyResources(this.ButtonPanel, "ButtonPanel");
+            this.ButtonPanel.Name = "ButtonPanel";
+            // 
+            // CancelBtn
+            // 
+            resources.ApplyResources(this.CancelBtn, "CancelBtn");
+            this.CancelBtn.Name = "CancelBtn";
+            this.CancelBtn.UseVisualStyleBackColor = true;
+            this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click);
+            // 
+            // OKBtn
+            // 
+            resources.ApplyResources(this.OKBtn, "OKBtn");
+            this.OKBtn.Name = "OKBtn";
+            this.OKBtn.UseVisualStyleBackColor = true;
+            this.OKBtn.Click += new System.EventHandler(this.OKBtn_Click);
+            // 
+            // colorComboBox1
+            // 
+            resources.ApplyResources(this.colorComboBox1, "colorComboBox1");
+            this.colorComboBox1.Name = "colorComboBox1";
+            // 
+            // ThemeCreator
+            // 
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.ButtonPanel);
+            this.Controls.Add(this.PreviewGroup);
+            this.Controls.Add(this.DisplayGroup);
+            this.Controls.Add(this.DataGroup);
+            this.Name = "ThemeCreator";
+            this.Load += new System.EventHandler(this.ThemeCreator_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.RuleCount)).EndInit();
+            this.DataGroup.ResumeLayout(false);
+            this.DataGroup.PerformLayout();
+            this.GroupPanel.ResumeLayout(false);
+            this.GroupPanel.PerformLayout();
+            this.RuleCountPanel.ResumeLayout(false);
+            this.RuleCountPanel.PerformLayout();
+            this.DisplayGroup.ResumeLayout(false);
+            this.DisplayGroup.PerformLayout();
+            this.ColorBrewerPanel.ResumeLayout(false);
+            this.ColorBrewerPanel.PerformLayout();
+            this.panel2.ResumeLayout(false);
+            this.panel2.PerformLayout();
+            this.PreviewGroup.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.PreviewPicture)).EndInit();
+            this.ButtonPanel.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label AggregateLabel;
+        private System.Windows.Forms.RadioButton OverwriteRules;
+        private System.Windows.Forms.RadioButton AppendRules;
+        private System.Windows.Forms.ComboBox ColumnCombo;
+        private System.Windows.Forms.NumericUpDown RuleCount;
+        private System.Windows.Forms.ComboBox AggregateCombo;
+        private System.Windows.Forms.GroupBox DataGroup;
+        private System.Windows.Forms.GroupBox DisplayGroup;
+        private System.Windows.Forms.GroupBox PreviewGroup;
+        private System.Windows.Forms.Panel ButtonPanel;
+        private System.Windows.Forms.Button CancelBtn;
+        private System.Windows.Forms.Button OKBtn;
+        private System.Windows.Forms.Panel panel2;
+        private System.Windows.Forms.Button ChangeBaseStyleBtn;
+        private System.Windows.Forms.RadioButton ColorBrewerColors;
+        private System.Windows.Forms.RadioButton GradientColors;
+        private CustomCombo ColorBrewerColorSet;
+        private System.Windows.Forms.Label label4;
+        private ColorComboBox colorComboBox1;
+        private System.Windows.Forms.Panel RuleCountPanel;
+        private ColorComboBox GradientToColor;
+        private ColorComboBox GradientFromColor;
+        private System.Windows.Forms.PictureBox PreviewPicture;
+        private System.Windows.Forms.Panel GroupPanel;
+        private System.Windows.Forms.Panel ColorBrewerPanel;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.ComboBox ColorBrewerDataType;
+        private System.Windows.Forms.LinkLabel ColorBrewerLabel;
+    }
+}
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ThemeCreator.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ThemeCreator.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/Thematics/ThemeCreator.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,882 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="label1.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 16</value>
+  </data>
+  <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>42, 13</value>
+  </data>
+  <data name="label1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="label1.Text" xml:space="preserve">
+    <value>Column</value>
+  </data>
+  <data name="&gt;&gt;label1.Name" xml:space="preserve">
+    <value>label1</value>
+  </data>
+  <data name="&gt;&gt;label1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label1.Parent" xml:space="preserve">
+    <value>DataGroup</value>
+  </data>
+  <data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="label2.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="label2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>56, 13</value>
+  </data>
+  <data name="label2.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="label2.Text" xml:space="preserve">
+    <value>Rulecount</value>
+  </data>
+  <data name="&gt;&gt;label2.Name" xml:space="preserve">
+    <value>label2</value>
+  </data>
+  <data name="&gt;&gt;label2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label2.Parent" xml:space="preserve">
+    <value>RuleCountPanel</value>
+  </data>
+  <data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="AggregateLabel.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="AggregateLabel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="AggregateLabel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>74, 13</value>
+  </data>
+  <data name="AggregateLabel.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="AggregateLabel.Text" xml:space="preserve">
+    <value>Group method</value>
+  </data>
+  <data name="&gt;&gt;AggregateLabel.Name" xml:space="preserve">
+    <value>AggregateLabel</value>
+  </data>
+  <data name="&gt;&gt;AggregateLabel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;AggregateLabel.Parent" xml:space="preserve">
+    <value>GroupPanel</value>
+  </data>
+  <data name="&gt;&gt;AggregateLabel.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="OverwriteRules.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="OverwriteRules.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 88</value>
+  </data>
+  <data name="OverwriteRules.Size" type="System.Drawing.Size, System.Drawing">
+    <value>133, 17</value>
+  </data>
+  <data name="OverwriteRules.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="OverwriteRules.Text" xml:space="preserve">
+    <value>Overwrite existing rules</value>
+  </data>
+  <data name="&gt;&gt;OverwriteRules.Name" xml:space="preserve">
+    <value>OverwriteRules</value>
+  </data>
+  <data name="&gt;&gt;OverwriteRules.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;OverwriteRules.Parent" xml:space="preserve">
+    <value>DataGroup</value>
+  </data>
+  <data name="&gt;&gt;OverwriteRules.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="AppendRules.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="AppendRules.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 112</value>
+  </data>
+  <data name="AppendRules.Size" type="System.Drawing.Size, System.Drawing">
+    <value>87, 17</value>
+  </data>
+  <data name="AppendRules.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="AppendRules.Text" xml:space="preserve">
+    <value>Append rules</value>
+  </data>
+  <data name="&gt;&gt;AppendRules.Name" xml:space="preserve">
+    <value>AppendRules</value>
+  </data>
+  <data name="&gt;&gt;AppendRules.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;AppendRules.Parent" xml:space="preserve">
+    <value>DataGroup</value>
+  </data>
+  <data name="&gt;&gt;AppendRules.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="ColumnCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="ColumnCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>104, 16</value>
+  </data>
+  <data name="ColumnCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>208, 21</value>
+  </data>
+  <data name="ColumnCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="&gt;&gt;ColumnCombo.Name" xml:space="preserve">
+    <value>ColumnCombo</value>
+  </data>
+  <data name="&gt;&gt;ColumnCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ColumnCombo.Parent" xml:space="preserve">
+    <value>DataGroup</value>
+  </data>
+  <data name="&gt;&gt;ColumnCombo.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="RuleCount.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="RuleCount.Location" type="System.Drawing.Point, System.Drawing">
+    <value>96, 0</value>
+  </data>
+  <data name="RuleCount.Size" type="System.Drawing.Size, System.Drawing">
+    <value>208, 20</value>
+  </data>
+  <data name="RuleCount.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="&gt;&gt;RuleCount.Name" xml:space="preserve">
+    <value>RuleCount</value>
+  </data>
+  <data name="&gt;&gt;RuleCount.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;RuleCount.Parent" xml:space="preserve">
+    <value>RuleCountPanel</value>
+  </data>
+  <data name="&gt;&gt;RuleCount.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="AggregateCombo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="AggregateCombo.Items" xml:space="preserve">
+    <value>Equal</value>
+  </data>
+  <data name="AggregateCombo.Items1" xml:space="preserve">
+    <value>Standard Deviation</value>
+  </data>
+  <data name="AggregateCombo.Items2" xml:space="preserve">
+    <value>Quantile</value>
+  </data>
+  <data name="AggregateCombo.Items3" xml:space="preserve">
+    <value>Individual</value>
+  </data>
+  <data name="AggregateCombo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>96, 0</value>
+  </data>
+  <data name="AggregateCombo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>208, 21</value>
+  </data>
+  <data name="AggregateCombo.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="&gt;&gt;AggregateCombo.Name" xml:space="preserve">
+    <value>AggregateCombo</value>
+  </data>
+  <data name="&gt;&gt;AggregateCombo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;AggregateCombo.Parent" xml:space="preserve">
+    <value>GroupPanel</value>
+  </data>
+  <data name="&gt;&gt;AggregateCombo.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="DataGroup.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="GroupPanel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 40</value>
+  </data>
+  <data name="GroupPanel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>304, 24</value>
+  </data>
+  <data name="GroupPanel.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="&gt;&gt;GroupPanel.Name" xml:space="preserve">
+    <value>GroupPanel</value>
+  </data>
+  <data name="&gt;&gt;GroupPanel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;GroupPanel.Parent" xml:space="preserve">
+    <value>DataGroup</value>
+  </data>
+  <data name="&gt;&gt;GroupPanel.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="RuleCountPanel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="RuleCountPanel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 64</value>
+  </data>
+  <data name="RuleCountPanel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>304, 24</value>
+  </data>
+  <data name="RuleCountPanel.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="&gt;&gt;RuleCountPanel.Name" xml:space="preserve">
+    <value>RuleCountPanel</value>
+  </data>
+  <data name="&gt;&gt;RuleCountPanel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;RuleCountPanel.Parent" xml:space="preserve">
+    <value>DataGroup</value>
+  </data>
+  <data name="&gt;&gt;RuleCountPanel.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="DataGroup.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 8</value>
+  </data>
+  <data name="DataGroup.Size" type="System.Drawing.Size, System.Drawing">
+    <value>320, 136</value>
+  </data>
+  <data name="DataGroup.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="DataGroup.Text" xml:space="preserve">
+    <value>Data setup</value>
+  </data>
+  <data name="&gt;&gt;DataGroup.Name" xml:space="preserve">
+    <value>DataGroup</value>
+  </data>
+  <data name="&gt;&gt;DataGroup.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;DataGroup.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;DataGroup.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="DisplayGroup.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="label3.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>90, 3</value>
+  </data>
+  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>16, 13</value>
+  </data>
+  <data name="label3.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="label3.Text" xml:space="preserve">
+    <value>-&gt;</value>
+  </data>
+  <data name="&gt;&gt;label3.Name" xml:space="preserve">
+    <value>label3</value>
+  </data>
+  <data name="&gt;&gt;label3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label3.Parent" xml:space="preserve">
+    <value>ColorBrewerPanel</value>
+  </data>
+  <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="ColorBrewerDataType.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="ColorBrewerDataType.Size" type="System.Drawing.Size, System.Drawing">
+    <value>88, 21</value>
+  </data>
+  <data name="ColorBrewerDataType.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerDataType.Name" xml:space="preserve">
+    <value>ColorBrewerDataType</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerDataType.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerDataType.Parent" xml:space="preserve">
+    <value>ColorBrewerPanel</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerDataType.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="ColorBrewerColorSet.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 0</value>
+  </data>
+  <data name="ColorBrewerColorSet.Size" type="System.Drawing.Size, System.Drawing">
+    <value>88, 21</value>
+  </data>
+  <data name="ColorBrewerColorSet.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerColorSet.Name" xml:space="preserve">
+    <value>ColorBrewerColorSet</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerColorSet.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.CustomCombo, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4347, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerColorSet.Parent" xml:space="preserve">
+    <value>ColorBrewerPanel</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerColorSet.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="ColorBrewerPanel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 48</value>
+  </data>
+  <data name="ColorBrewerPanel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>200, 24</value>
+  </data>
+  <data name="ColorBrewerPanel.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerPanel.Name" xml:space="preserve">
+    <value>ColorBrewerPanel</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerPanel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerPanel.Parent" xml:space="preserve">
+    <value>DisplayGroup</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerPanel.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="ColorBrewerLabel.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="ColorBrewerLabel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>33, 48</value>
+  </data>
+  <data name="ColorBrewerLabel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>64, 13</value>
+  </data>
+  <data name="ColorBrewerLabel.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name="ColorBrewerLabel.Text" xml:space="preserve">
+    <value>ColorBrewer</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerLabel.Name" xml:space="preserve">
+    <value>ColorBrewerLabel</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerLabel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerLabel.Parent" xml:space="preserve">
+    <value>DisplayGroup</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerLabel.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="GradientToColor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 0</value>
+  </data>
+  <data name="GradientToColor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>88, 21</value>
+  </data>
+  <data name="GradientToColor.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="&gt;&gt;GradientToColor.Name" xml:space="preserve">
+    <value>GradientToColor</value>
+  </data>
+  <data name="&gt;&gt;GradientToColor.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.ColorComboBox, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4347, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;GradientToColor.Parent" xml:space="preserve">
+    <value>panel2</value>
+  </data>
+  <data name="&gt;&gt;GradientToColor.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="GradientFromColor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="GradientFromColor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>88, 21</value>
+  </data>
+  <data name="GradientFromColor.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;GradientFromColor.Name" xml:space="preserve">
+    <value>GradientFromColor</value>
+  </data>
+  <data name="&gt;&gt;GradientFromColor.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.ColorComboBox, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4347, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;GradientFromColor.Parent" xml:space="preserve">
+    <value>panel2</value>
+  </data>
+  <data name="&gt;&gt;GradientFromColor.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="label4.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label4.Location" type="System.Drawing.Point, System.Drawing">
+    <value>90, 4</value>
+  </data>
+  <data name="label4.Size" type="System.Drawing.Size, System.Drawing">
+    <value>16, 13</value>
+  </data>
+  <data name="label4.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="label4.Text" xml:space="preserve">
+    <value>-&gt;</value>
+  </data>
+  <data name="&gt;&gt;label4.Name" xml:space="preserve">
+    <value>label4</value>
+  </data>
+  <data name="&gt;&gt;label4.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label4.Parent" xml:space="preserve">
+    <value>panel2</value>
+  </data>
+  <data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 24</value>
+  </data>
+  <data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>200, 24</value>
+  </data>
+  <data name="panel2.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;panel2.Name" xml:space="preserve">
+    <value>panel2</value>
+  </data>
+  <data name="&gt;&gt;panel2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;panel2.Parent" xml:space="preserve">
+    <value>DisplayGroup</value>
+  </data>
+  <data name="&gt;&gt;panel2.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="ChangeBaseStyleBtn.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 80</value>
+  </data>
+  <data name="ChangeBaseStyleBtn.Size" type="System.Drawing.Size, System.Drawing">
+    <value>112, 23</value>
+  </data>
+  <data name="ChangeBaseStyleBtn.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="ChangeBaseStyleBtn.Text" xml:space="preserve">
+    <value>Change base style</value>
+  </data>
+  <data name="&gt;&gt;ChangeBaseStyleBtn.Name" xml:space="preserve">
+    <value>ChangeBaseStyleBtn</value>
+  </data>
+  <data name="&gt;&gt;ChangeBaseStyleBtn.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ChangeBaseStyleBtn.Parent" xml:space="preserve">
+    <value>DisplayGroup</value>
+  </data>
+  <data name="&gt;&gt;ChangeBaseStyleBtn.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="ColorBrewerColors.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="ColorBrewerColors.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 48</value>
+  </data>
+  <data name="ColorBrewerColors.Size" type="System.Drawing.Size, System.Drawing">
+    <value>14, 13</value>
+  </data>
+  <data name="ColorBrewerColors.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerColors.Name" xml:space="preserve">
+    <value>ColorBrewerColors</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerColors.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerColors.Parent" xml:space="preserve">
+    <value>DisplayGroup</value>
+  </data>
+  <data name="&gt;&gt;ColorBrewerColors.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="GradientColors.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="GradientColors.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 24</value>
+  </data>
+  <data name="GradientColors.Size" type="System.Drawing.Size, System.Drawing">
+    <value>65, 17</value>
+  </data>
+  <data name="GradientColors.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="GradientColors.Text" xml:space="preserve">
+    <value>Gradient</value>
+  </data>
+  <data name="&gt;&gt;GradientColors.Name" xml:space="preserve">
+    <value>GradientColors</value>
+  </data>
+  <data name="&gt;&gt;GradientColors.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;GradientColors.Parent" xml:space="preserve">
+    <value>DisplayGroup</value>
+  </data>
+  <data name="&gt;&gt;GradientColors.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="DisplayGroup.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 152</value>
+  </data>
+  <data name="DisplayGroup.Size" type="System.Drawing.Size, System.Drawing">
+    <value>320, 112</value>
+  </data>
+  <data name="DisplayGroup.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="DisplayGroup.Text" xml:space="preserve">
+    <value>Display setup</value>
+  </data>
+  <data name="&gt;&gt;DisplayGroup.Name" xml:space="preserve">
+    <value>DisplayGroup</value>
+  </data>
+  <data name="&gt;&gt;DisplayGroup.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;DisplayGroup.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;DisplayGroup.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="PreviewGroup.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="PreviewPicture.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 16</value>
+  </data>
+  <data name="PreviewPicture.Size" type="System.Drawing.Size, System.Drawing">
+    <value>304, 24</value>
+  </data>
+  <data name="PreviewPicture.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;PreviewPicture.Name" xml:space="preserve">
+    <value>PreviewPicture</value>
+  </data>
+  <data name="&gt;&gt;PreviewPicture.Type" xml:space="preserve">
+    <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;PreviewPicture.Parent" xml:space="preserve">
+    <value>PreviewGroup</value>
+  </data>
+  <data name="&gt;&gt;PreviewPicture.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="PreviewGroup.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 272</value>
+  </data>
+  <data name="PreviewGroup.Size" type="System.Drawing.Size, System.Drawing">
+    <value>320, 48</value>
+  </data>
+  <data name="PreviewGroup.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name="PreviewGroup.Text" xml:space="preserve">
+    <value>Preview</value>
+  </data>
+  <data name="&gt;&gt;PreviewGroup.Name" xml:space="preserve">
+    <value>PreviewGroup</value>
+  </data>
+  <data name="&gt;&gt;PreviewGroup.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;PreviewGroup.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;PreviewGroup.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="CancelBtn.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="CancelBtn.Location" type="System.Drawing.Point, System.Drawing">
+    <value>176, 7</value>
+  </data>
+  <data name="CancelBtn.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
+  </data>
+  <data name="CancelBtn.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="CancelBtn.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="&gt;&gt;CancelBtn.Name" xml:space="preserve">
+    <value>CancelBtn</value>
+  </data>
+  <data name="&gt;&gt;CancelBtn.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;CancelBtn.Parent" xml:space="preserve">
+    <value>ButtonPanel</value>
+  </data>
+  <data name="&gt;&gt;CancelBtn.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="OKBtn.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top</value>
+  </data>
+  <data name="OKBtn.Location" type="System.Drawing.Point, System.Drawing">
+    <value>88, 8</value>
+  </data>
+  <data name="OKBtn.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
+  </data>
+  <data name="OKBtn.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="OKBtn.Text" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="&gt;&gt;OKBtn.Name" xml:space="preserve">
+    <value>OKBtn</value>
+  </data>
+  <data name="&gt;&gt;OKBtn.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;OKBtn.Parent" xml:space="preserve">
+    <value>ButtonPanel</value>
+  </data>
+  <data name="&gt;&gt;OKBtn.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="ButtonPanel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Bottom</value>
+  </data>
+  <data name="ButtonPanel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 327</value>
+  </data>
+  <data name="ButtonPanel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>333, 36</value>
+  </data>
+  <data name="ButtonPanel.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name="&gt;&gt;ButtonPanel.Name" xml:space="preserve">
+    <value>ButtonPanel</value>
+  </data>
+  <data name="&gt;&gt;ButtonPanel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ButtonPanel.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;ButtonPanel.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="colorComboBox1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="colorComboBox1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>121, 21</value>
+  </data>
+  <data name="colorComboBox1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;colorComboBox1.Name" xml:space="preserve">
+    <value>colorComboBox1</value>
+  </data>
+  <data name="&gt;&gt;colorComboBox1.Type" xml:space="preserve">
+    <value>OSGeo.MapGuide.Maestro.ResourceEditors.GeometryStyleEditors.ColorComboBox, OSGeo.MapGuide.Maestro.ResourceEditors, Version=1.1.0.4347, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 13</value>
+  </data>
+  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
+    <value>333, 363</value>
+  </data>
+  <data name="$this.Text" xml:space="preserve">
+    <value>Theme Creator</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>ThemeCreator</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Modified: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.cs	2010-07-23 01:43:33 UTC (rev 5049)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -123,8 +123,13 @@
             }
         }
 
-        private FeatureSourceDescription.FeatureSourceSchema GetSelectedClass()
+        internal string FeatureSourceID
         {
+            get { return txtFeatureSource.Text; }
+        }
+
+        internal FeatureSourceDescription.FeatureSourceSchema GetSelectedClass()
+        {
             if (cmbSchema.SelectedItem != null)
             {
                 foreach (var schema in _cachedDesc.Schemas)

Modified: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.Designer.cs	2010-07-23 01:43:33 UTC (rev 5049)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.Designer.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -34,14 +34,14 @@
             this.btnDuplicate = new System.Windows.Forms.ToolStripButton();
             this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
             this.btnSort = new System.Windows.Forms.ToolStripButton();
-            this.scaleRangeListCtrl1 = new Maestro.Editors.LayerDefinition.Scales.ScaleRangeListCtrl();
+            this.scaleRangeList = new OSGeo.MapGuide.Maestro.ResourceEditors.LayerEditorControls.ScaleControls.ScaleRangeList();
             this.contentPanel.SuspendLayout();
             this.toolStrip1.SuspendLayout();
             this.SuspendLayout();
             // 
             // contentPanel
             // 
-            this.contentPanel.Controls.Add(this.scaleRangeListCtrl1);
+            this.contentPanel.Controls.Add(this.scaleRangeList);
             this.contentPanel.Controls.Add(this.toolStrip1);
             // 
             // toolStrip1
@@ -63,26 +63,29 @@
             this.btnAdd.Image = global::Maestro.Editors.Properties.Resources.plus_circle;
             this.btnAdd.ImageTransparentColor = System.Drawing.Color.Magenta;
             this.btnAdd.Name = "btnAdd";
-            this.btnAdd.Size = new System.Drawing.Size(46, 22);
+            this.btnAdd.Size = new System.Drawing.Size(49, 22);
             this.btnAdd.Text = "Add";
             this.btnAdd.ToolTipText = "Add a scale range";
+            this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
             // 
             // btnDelete
             // 
             this.btnDelete.Image = global::Maestro.Editors.Properties.Resources.minus_circle;
             this.btnDelete.ImageTransparentColor = System.Drawing.Color.Magenta;
             this.btnDelete.Name = "btnDelete";
-            this.btnDelete.Size = new System.Drawing.Size(58, 22);
+            this.btnDelete.Size = new System.Drawing.Size(60, 22);
             this.btnDelete.Text = "Delete";
             this.btnDelete.ToolTipText = "Delete selected scale range";
+            this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
             // 
             // btnDuplicate
             // 
             this.btnDuplicate.Image = global::Maestro.Editors.Properties.Resources.document_copy;
             this.btnDuplicate.ImageTransparentColor = System.Drawing.Color.Magenta;
             this.btnDuplicate.Name = "btnDuplicate";
-            this.btnDuplicate.Size = new System.Drawing.Size(71, 22);
+            this.btnDuplicate.Size = new System.Drawing.Size(77, 22);
             this.btnDuplicate.Text = "Duplicate";
+            this.btnDuplicate.Click += new System.EventHandler(this.btnDuplicate_Click);
             // 
             // toolStripSeparator1
             // 
@@ -94,17 +97,21 @@
             this.btnSort.Image = global::Maestro.Editors.Properties.Resources.sort_number;
             this.btnSort.ImageTransparentColor = System.Drawing.Color.Magenta;
             this.btnSort.Name = "btnSort";
-            this.btnSort.Size = new System.Drawing.Size(47, 22);
+            this.btnSort.Size = new System.Drawing.Size(48, 22);
             this.btnSort.Text = "Sort";
             this.btnSort.ToolTipText = "Sort the sacle ranges by display range";
+            this.btnSort.Click += new System.EventHandler(this.btnSort_Click);
             // 
-            // scaleRangeListCtrl1
+            // scaleRangeList
             // 
-            this.scaleRangeListCtrl1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.scaleRangeListCtrl1.Location = new System.Drawing.Point(0, 25);
-            this.scaleRangeListCtrl1.Name = "scaleRangeListCtrl1";
-            this.scaleRangeListCtrl1.Size = new System.Drawing.Size(449, 267);
-            this.scaleRangeListCtrl1.TabIndex = 1;
+            this.scaleRangeList.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.scaleRangeList.Location = new System.Drawing.Point(0, 25);
+            this.scaleRangeList.Name = "scaleRangeList";
+            this.scaleRangeList.Owner = null;
+            this.scaleRangeList.Size = new System.Drawing.Size(449, 267);
+            this.scaleRangeList.TabIndex = 1;
+            this.scaleRangeList.SelectionChanged += new System.EventHandler(this.scaleRangeList_SelectionChanged);
+            this.scaleRangeList.ItemChanged += new System.EventHandler(this.scaleRangeList_ItemChanged);
             // 
             // VectorLayerStyleSectionCtrl
             // 
@@ -123,7 +130,7 @@
         #endregion
 
         private System.Windows.Forms.ToolStrip toolStrip1;
-        private Maestro.Editors.LayerDefinition.Scales.ScaleRangeListCtrl scaleRangeListCtrl1;
+        private OSGeo.MapGuide.Maestro.ResourceEditors.LayerEditorControls.ScaleControls.ScaleRangeList scaleRangeList;
         private System.Windows.Forms.ToolStripButton btnAdd;
         private System.Windows.Forms.ToolStripButton btnDelete;
         private System.Windows.Forms.ToolStripButton btnDuplicate;

Modified: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.cs	2010-07-23 01:43:33 UTC (rev 5049)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -25,6 +25,9 @@
 using System.Text;
 using System.Windows.Forms;
 using Maestro.Shared.UI;
+using OSGeo.MapGuide.MaestroAPI.ObjectModels;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using System.Collections;
 
 namespace Maestro.Editors.LayerDefinition.Vector
 {
@@ -36,11 +39,147 @@
             InitializeComponent();
         }
 
+        private VectorLayerDefinitionType _vl;
+        private IEditorService _edsvc;
+
         public void Bind(IEditorService service)
         {
-            throw new NotImplementedException();
+            _edsvc = service;
+            _edsvc.RegisterCustomNotifier(this);
+            _vl = (VectorLayerDefinitionType)((ILayerDefinition)service.GetEditedResource()).SubLayer;
+
+            scaleRangeList.SetItem(_vl);
+            scaleRangeList.ResizeAuto();
+
+            EvaluateCommands();
         }
 
+        public VectorLayerEditorCtrl Owner
+        {
+            set { scaleRangeList.Owner = value; }
+        }
+
+        private void OnResourceChanged()
+        {
+            var handler = this.ResourceChanged;
+            if (handler != null)
+                handler(this, EventArgs.Empty);
+        }
+
         public event EventHandler ResourceChanged;
+
+        private void btnAdd_Click(object sender, EventArgs e)
+        {
+            AddScaleRange(ObjectFactory.CreateVectorScaleRange());
+        }
+
+        private void btnDelete_Click(object sender, EventArgs e)
+        {
+            if (scaleRangeList.SelectedItem == null)
+                return;
+            VectorScaleRangeType vsc = scaleRangeList.SelectedItem;
+            scaleRangeList.RemoveScaleRange(scaleRangeList.SelectedItem);
+            _vl.VectorScaleRange.Remove(scaleRangeList.SelectedItem);
+
+            _edsvc.HasChanged();
+        }
+
+        private void btnDuplicate_Click(object sender, EventArgs e)
+        {
+            if (scaleRangeList.SelectedItem == null)
+                return;
+
+            AddScaleRange(scaleRangeList.SelectedItem.Clone());
+        }
+
+        private void btnSort_Click(object sender, EventArgs e)
+        {
+            if (_vl == null)
+                return;
+
+            if (_vl.VectorScaleRange == null || _vl.VectorScaleRange.Count == 0)
+                return;
+
+            List<VectorScaleRangeType> ranges = new List<VectorScaleRangeType>();
+            foreach (VectorScaleRangeType sc in _vl.VectorScaleRange)
+                ranges.Add(sc);
+            ranges.Sort(new ScaleRangeSorter());
+
+            _vl.VectorScaleRange.Clear();
+            foreach (VectorScaleRangeType sc in ranges)
+                _vl.VectorScaleRange.Add(sc);
+
+            //Refresh display
+            scaleRangeList.SetItem(_vl);
+            scaleRangeList.ResizeAuto();
+
+            _edsvc.HasChanged();
+        }
+
+        /// <summary>
+        /// Sort helper used to sort the scale ranges
+        /// </summary>
+        private class ScaleRangeSorter : IComparer, IComparer<VectorScaleRangeType>
+        {
+            public int Compare(object x, object y)
+            {
+                if (x is VectorScaleRangeType && y is VectorScaleRangeType)
+                {
+                    VectorScaleRangeType vx = (VectorScaleRangeType)x;
+                    VectorScaleRangeType vy = (VectorScaleRangeType)y;
+
+                    double minX = vx.MinScaleSpecified ? vx.MinScale : 0;
+                    double maxX = vx.MaxScaleSpecified ? vx.MaxScale : double.MaxValue;
+                    double minY = vy.MinScaleSpecified ? vy.MinScale : 0;
+                    double maxY = vy.MaxScaleSpecified ? vy.MaxScale : double.MaxValue;
+
+                    if (minX == minY)
+                        if (maxX == maxY)
+                            return 0;
+                        else
+                            return maxX > maxY ? 1 : -1;
+                    else
+                        return minX > minY ? 1 : -1;
+                }
+                else
+                    return 0;
+            }
+
+            public int Compare(VectorScaleRangeType x, VectorScaleRangeType y)
+            {
+                return this.Compare((object)x, (object)y);
+            }
+        }
+
+        private void AddScaleRange(VectorScaleRangeType vsc)
+        {
+            if (_vl == null)
+                return;
+
+            _vl.VectorScaleRange.Add(vsc);
+            Control c = scaleRangeList.AddScaleRange(vsc);
+            scaleRangeList.ResizeAuto();
+            _edsvc.HasChanged();
+
+            try { c.Focus(); }
+            catch { }
+        }
+
+        private void scaleRangeList_ItemChanged(object sender, EventArgs e)
+        {
+            scaleRangeList.ResizeAuto();
+            _edsvc.HasChanged();
+        }
+
+        private void scaleRangeList_SelectionChanged(object sender, EventArgs e)
+        {
+            EvaluateCommands();
+        }
+
+        private void EvaluateCommands()
+        {
+            btnDelete.Enabled = btnDuplicate.Enabled = scaleRangeList.SelectedItem != null;
+            btnSort.Enabled = _vl.VectorScaleRange.Count > 1;
+        }
     }
 }

Modified: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.cs	2010-07-23 01:43:33 UTC (rev 5049)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -5,6 +5,9 @@
 using System.Data;
 using System.Text;
 using System.Windows.Forms;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using OSGeo.MapGuide.ObjectModels.FeatureSource;
+using OSGeo.MapGuide.MaestroAPI;
 
 namespace Maestro.Editors.LayerDefinition
 {
@@ -15,13 +18,58 @@
             InitializeComponent();
         }
 
+        private IEditorService _edsvc;
+        private IVectorLayerDefinition _vl;
+
         public override void Bind(IEditorService service)
         {
+            _edsvc = service;
+            _vl = (IVectorLayerDefinition)((ILayerDefinition)service.GetEditedResource()).SubLayer;
+
             service.RegisterCustomNotifier(this);
-            resSettings.ResourceChanged += (sender, e) => { OnResourceChanged(); };
             resSettings.Bind(service);
-            layerProperties.ResourceChanged += (sender, e) => { OnResourceChanged(); };
             layerProperties.Bind(service);
+
+            layerStyles.Owner = this;
+            layerStyles.Bind(service);
+
         }
+
+        internal IEditorService Editor
+        {
+            get { return _edsvc; }
+        }
+
+        internal string EditExpression(string expr)
+        {
+            var fs = (FeatureSourceType)_edsvc.ResourceService.GetResource(_vl.FeatureSourceID);
+
+            return _edsvc.EditExpression(expr, fs.GetClass(_vl.FullQualifiedClassName), fs.Provider, _vl.FeatureSourceID);
+        }
+
+        internal void UpdateDisplay()
+        {
+            
+        }
+
+        internal void HasChanged()
+        {
+            _edsvc.HasChanged();
+        }
+
+        internal void SetLastException(Exception ex)
+        {
+            
+        }
+
+        internal FeatureSourceDescription.FeatureSourceSchema Schema
+        {
+            get { return resSettings.GetSelectedClass(); }
+        }
+
+        internal string FeatureSourceId
+        {
+            get { return resSettings.FeatureSourceID; }
+        }
     }
 }

Modified: sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj	2010-07-23 01:43:33 UTC (rev 5049)
+++ sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj	2010-07-23 12:38:06 UTC (rev 5050)
@@ -79,6 +79,9 @@
     <Compile Include="Common\ExpressionEditor.designer.cs">
       <DependentUpon>ExpressionEditor.cs</DependentUpon>
     </Compile>
+    <Compile Include="Common\ImageStylePicker.cs">
+      <SubType>Component</SubType>
+    </Compile>
     <Compile Include="Common\ResourceDataCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -258,54 +261,89 @@
     <Compile Include="LayerDefinition\LayerPropertiesSectionCtrl.Designer.cs">
       <DependentUpon>LayerPropertiesSectionCtrl.cs</DependentUpon>
     </Compile>
-    <Compile Include="LayerDefinition\Scales\ConditionCtrl.cs">
+    <Compile Include="LayerDefinition\VectorLayerEditorCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="LayerDefinition\Scales\ConditionCtrl.Designer.cs">
-      <DependentUpon>ConditionCtrl.cs</DependentUpon>
+    <Compile Include="LayerDefinition\VectorLayerEditorCtrl.Designer.cs">
+      <DependentUpon>VectorLayerEditorCtrl.cs</DependentUpon>
     </Compile>
-    <Compile Include="LayerDefinition\Scales\ItemStyleCtrl.cs">
+    <Compile Include="LayerDefinition\Vector\FeaturePreviewRender.cs" />
+    <Compile Include="LayerDefinition\Vector\Scales\Condition.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="LayerDefinition\Scales\ItemStyleCtrl.Designer.cs">
-      <DependentUpon>ItemStyleCtrl.cs</DependentUpon>
+    <Compile Include="LayerDefinition\Vector\Scales\Condition.designer.cs">
+      <DependentUpon>Condition.cs</DependentUpon>
     </Compile>
-    <Compile Include="LayerDefinition\Scales\ScaleRangeConditionsCtrl.cs">
+    <Compile Include="LayerDefinition\Vector\Scales\ConditionList.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="LayerDefinition\Scales\ScaleRangeConditionsCtrl.Designer.cs">
-      <DependentUpon>ScaleRangeConditionsCtrl.cs</DependentUpon>
+    <Compile Include="LayerDefinition\Vector\Scales\ConditionList.designer.cs">
+      <DependentUpon>ConditionList.cs</DependentUpon>
     </Compile>
-    <Compile Include="LayerDefinition\Scales\ScaleRangeCtrl.cs">
+    <Compile Include="LayerDefinition\Vector\Scales\ConditionListButtons.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="LayerDefinition\Scales\ScaleRangeCtrl.Designer.cs">
-      <DependentUpon>ScaleRangeCtrl.cs</DependentUpon>
+    <Compile Include="LayerDefinition\Vector\Scales\ConditionListButtons.designer.cs">
+      <DependentUpon>ConditionListButtons.cs</DependentUpon>
     </Compile>
-    <Compile Include="LayerDefinition\Scales\ScaleRangeGeometryStyleCtrl.cs">
+    <Compile Include="LayerDefinition\Vector\Scales\EditorTemplateForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Vector\Scales\EditorTemplateForm.designer.cs">
+      <DependentUpon>EditorTemplateForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LayerDefinition\Vector\Scales\ItemStyle.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="LayerDefinition\Scales\ScaleRangeGeometryStyleCtrl.Designer.cs">
-      <DependentUpon>ScaleRangeGeometryStyleCtrl.cs</DependentUpon>
+    <Compile Include="LayerDefinition\Vector\Scales\ItemStyle.designer.cs">
+      <DependentUpon>ItemStyle.cs</DependentUpon>
     </Compile>
-    <Compile Include="LayerDefinition\Scales\ScaleRangeListCtrl.cs">
+    <Compile Include="LayerDefinition\Vector\Scales\ScaleRange.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="LayerDefinition\Scales\ScaleRangeListCtrl.Designer.cs">
-      <DependentUpon>ScaleRangeListCtrl.cs</DependentUpon>
+    <Compile Include="LayerDefinition\Vector\Scales\ScaleRange.designer.cs">
+      <DependentUpon>ScaleRange.cs</DependentUpon>
     </Compile>
-    <Compile Include="LayerDefinition\Thematics\ThemeDialog.cs">
-      <SubType>Form</SubType>
+    <Compile Include="LayerDefinition\Vector\Scales\ScaleRangeConditions.cs">
+      <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="LayerDefinition\Thematics\ThemeDialog.Designer.cs">
-      <DependentUpon>ThemeDialog.cs</DependentUpon>
+    <Compile Include="LayerDefinition\Vector\Scales\ScaleRangeConditions.designer.cs">
+      <DependentUpon>ScaleRangeConditions.cs</DependentUpon>
     </Compile>
-    <Compile Include="LayerDefinition\VectorLayerEditorCtrl.cs">
+    <Compile Include="LayerDefinition\Vector\Scales\ScaleRangeList.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="LayerDefinition\VectorLayerEditorCtrl.Designer.cs">
-      <DependentUpon>VectorLayerEditorCtrl.cs</DependentUpon>
+    <Compile Include="LayerDefinition\Vector\Scales\ScaleRangeList.designer.cs">
+      <DependentUpon>ScaleRangeList.cs</DependentUpon>
     </Compile>
+    <Compile Include="LayerDefinition\Vector\StyleEditors\AreaFeatureStyleEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Vector\StyleEditors\FillStyleEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Vector\StyleEditors\FontStyleEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Vector\StyleEditors\LineFeatureStyleEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Vector\StyleEditors\LineStyleEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Vector\StyleEditors\PointFeatureStyleEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Vector\StyleEditors\ScaleRangeEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Vector\Thematics\ColorBrewer.cs" />
+    <Compile Include="LayerDefinition\Vector\Thematics\ThemeCreator.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Vector\Thematics\ThemeCreator.designer.cs">
+      <DependentUpon>ThemeCreator.cs</DependentUpon>
+    </Compile>
     <Compile Include="LayerDefinition\Vector\VectorLayerSettingsSectionCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -469,6 +507,9 @@
       <DependentUpon>ExpressionEditor.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="Common\ImageStylePicker.resx">
+      <DependentUpon>ImageStylePicker.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="Common\ResourceDataCtrl.resx">
       <DependentUpon>ResourceDataCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>
@@ -585,38 +626,58 @@
       <DependentUpon>LayerPropertiesSectionCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
-    <EmbeddedResource Include="LayerDefinition\Scales\ConditionCtrl.resx">
-      <DependentUpon>ConditionCtrl.cs</DependentUpon>
+    <EmbeddedResource Include="LayerDefinition\VectorLayerEditorCtrl.resx">
+      <DependentUpon>VectorLayerEditorCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
-    <EmbeddedResource Include="LayerDefinition\Scales\ItemStyleCtrl.resx">
-      <DependentUpon>ItemStyleCtrl.cs</DependentUpon>
-      <SubType>Designer</SubType>
+    <EmbeddedResource Include="LayerDefinition\Vector\Scales\Condition.resx">
+      <DependentUpon>Condition.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="LayerDefinition\Scales\ScaleRangeConditionsCtrl.resx">
-      <DependentUpon>ScaleRangeConditionsCtrl.cs</DependentUpon>
-      <SubType>Designer</SubType>
+    <EmbeddedResource Include="LayerDefinition\Vector\Scales\ConditionList.resx">
+      <DependentUpon>ConditionList.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="LayerDefinition\Scales\ScaleRangeCtrl.resx">
-      <DependentUpon>ScaleRangeCtrl.cs</DependentUpon>
-      <SubType>Designer</SubType>
+    <EmbeddedResource Include="LayerDefinition\Vector\Scales\ConditionListButtons.resx">
+      <DependentUpon>ConditionListButtons.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="LayerDefinition\Scales\ScaleRangeGeometryStyleCtrl.resx">
-      <DependentUpon>ScaleRangeGeometryStyleCtrl.cs</DependentUpon>
-      <SubType>Designer</SubType>
+    <EmbeddedResource Include="LayerDefinition\Vector\Scales\EditorTemplateForm.resx">
+      <DependentUpon>EditorTemplateForm.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="LayerDefinition\Scales\ScaleRangeListCtrl.resx">
-      <DependentUpon>ScaleRangeListCtrl.cs</DependentUpon>
-      <SubType>Designer</SubType>
+    <EmbeddedResource Include="LayerDefinition\Vector\Scales\ItemStyle.resx">
+      <DependentUpon>ItemStyle.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="LayerDefinition\Thematics\ThemeDialog.resx">
-      <DependentUpon>ThemeDialog.cs</DependentUpon>
-      <SubType>Designer</SubType>
+    <EmbeddedResource Include="LayerDefinition\Vector\Scales\ScaleRange.resx">
+      <DependentUpon>ScaleRange.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="LayerDefinition\VectorLayerEditorCtrl.resx">
-      <DependentUpon>VectorLayerEditorCtrl.cs</DependentUpon>
-      <SubType>Designer</SubType>
+    <EmbeddedResource Include="LayerDefinition\Vector\Scales\ScaleRangeConditions.resx">
+      <DependentUpon>ScaleRangeConditions.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Vector\Scales\ScaleRangeList.resx">
+      <DependentUpon>ScaleRangeList.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Vector\StyleEditors\AreaFeatureStyleEditor.resx">
+      <DependentUpon>AreaFeatureStyleEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Vector\StyleEditors\FillStyleEditor.resx">
+      <DependentUpon>FillStyleEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Vector\StyleEditors\FontStyleEditor.resx">
+      <DependentUpon>FontStyleEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Vector\StyleEditors\LineFeatureStyleEditor.resx">
+      <DependentUpon>LineFeatureStyleEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Vector\StyleEditors\LineStyleEditor.resx">
+      <DependentUpon>LineStyleEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Vector\StyleEditors\PointFeatureStyleEditor.resx">
+      <DependentUpon>PointFeatureStyleEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Vector\StyleEditors\ScaleRangeEditor.resx">
+      <DependentUpon>ScaleRangeEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Vector\Thematics\ThemeCreator.resx">
+      <DependentUpon>ThemeCreator.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="LayerDefinition\Vector\VectorLayerSettingsSectionCtrl.resx">
       <DependentUpon>VectorLayerSettingsSectionCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>
@@ -901,9 +962,6 @@
     <None Include="Resources\sum.png" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="Resources\function1.png" />
-  </ItemGroup>
-  <ItemGroup>
     <None Include="Resources\funnel.png" />
   </ItemGroup>
   <ItemGroup>
@@ -913,9 +971,15 @@
     <None Include="Resources\ruler.png" />
   </ItemGroup>
   <ItemGroup>
+    <None Include="Resources\CommandTypesDataset.xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\ColorBrewer.csv" />
+    <None Include="Resources\GeometryStyleComboDataset.xml" />
+  </ItemGroup>
+  <ItemGroup>
     <Folder Include="DrawingSource\Preview\" />
     <Folder Include="FeatureSource\Providers\Rdbms\" />
-    <Folder Include="LayerDefinition\Geometry\" />
     <Folder Include="LayerDefinition\Raster\" />
     <Folder Include="PrintLayout\Logos\" />
     <Folder Include="PrintLayout\Text\" />

Modified: sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs	2010-07-23 01:43:33 UTC (rev 5049)
+++ sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:2.0.50727.3053
+//     Runtime Version:2.0.50727.4927
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
@@ -144,6 +144,15 @@
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Between {0} and {1}.
+        /// </summary>
+        internal static string BetweenLabel {
+            get {
+                return ResourceManager.GetString("BetweenLabel", resourceCulture);
+            }
+        }
+        
         internal static System.Drawing.Bitmap block {
             get {
                 object obj = ResourceManager.GetObject("block", resourceCulture);
@@ -159,6 +168,49 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to &quot;ColorName&quot;,&quot;NumOfColors&quot;,&quot;Type&quot;,&quot;CritVal&quot;,&quot;ColorNum&quot;,&quot;ColorLetter&quot;,&quot;R&quot;,&quot;G&quot;,&quot;B&quot;,&quot;SchemeType&quot;
+        ///&quot;Accent&quot;,3,&quot;qual&quot;,,1,&quot;A&quot;,127,201,127,&quot;Qualitative&quot;
+        ///,,,,2,&quot;B&quot;,190,174,212,
+        ///,,,,3,&quot;C&quot;,253,192,134,
+        ///&quot;Accent&quot;,4,&quot;qual&quot;,,1,&quot;A&quot;,127,201,127,
+        ///,,,,2,&quot;B&quot;,190,174,212,
+        ///,,,,3,&quot;C&quot;,253,192,134,
+        ///,,,,4,&quot;D&quot;,255,255,153,
+        ///&quot;Accent&quot;,5,&quot;qual&quot;,,1,&quot;A&quot;,127,201,127,
+        ///,,,,2,&quot;B&quot;,190,174,212,
+        ///,,,,3,&quot;C&quot;,253,192,134,
+        ///,,,,4,&quot;D&quot;,255,255,153,
+        ///,,,,5,&quot;E&quot;,56,108,176,
+        ///&quot;Accent&quot;,6,&quot;qual&quot;,,1,&quot;A&quot;,127,201,127,
+        ///,,,,2,&quot;B&quot;,190,174,212,
+        ///,,,,3,&quot;C&quot;,253,192,134,
+        ///,, [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string ColorBrewer {
+            get {
+                return ResourceManager.GetString("ColorBrewer", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Failed to read {0} color(s) in line {1}.
+        /// </summary>
+        internal static string ColorCountError {
+            get {
+                return ResourceManager.GetString("ColorCountError", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to The selected column had no non-null values and cannot be used..
+        /// </summary>
+        internal static string ColumnHasNoValidDataError {
+            get {
+                return ResourceManager.GetString("ColumnHasNoValidDataError", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to An error occured while reading column values: {0}.
         /// </summary>
         internal static string ColumnValueError {
@@ -167,6 +219,33 @@
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
+        ///
+        ///&lt;!-- 
+        ///  Note to translators:
+        ///    You can only translate &lt;Label&gt;, &lt;ToolTip&gt; and &lt;Description&gt;
+        ///    If you translate any of the others, the editor won&apos;t work!
+        ///--&gt;
+        ///
+        ///&lt;CommandTypesDataset&gt;
+        ///	&lt;Command&gt;
+        ///		&lt;Command&gt;About&lt;/Command&gt;
+        ///		&lt;Label&gt;About&lt;/Label&gt;
+        ///		&lt;ToolTip&gt;About&lt;/ToolTip&gt;
+        ///		&lt;Action&gt;About&lt;/Action&gt;
+        ///		&lt;Description&gt;Display information about this application&lt;/Description&gt;
+        ///		&lt;Viewers&gt;All&lt;/Viewers&gt;
+        ///		&lt;Type&gt;Built-In&lt;/Type&gt;
+        ///		&lt;EnabledIcon&gt;&lt;/EnabledIcon&gt;		
+        ///		&lt;D [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string CommandTypesDataset {
+            get {
+                return ResourceManager.GetString("CommandTypesDataset", resourceCulture);
+            }
+        }
+        
         internal static System.Drawing.Bitmap control {
             get {
                 object obj = ResourceManager.GetObject("control", resourceCulture);
@@ -216,6 +295,24 @@
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Unable to read data from the selected column: {0}.
+        /// </summary>
+        internal static string DataReadError {
+            get {
+                return ResourceManager.GetString("DataReadError", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Diverging.
+        /// </summary>
+        internal static string DivergingName {
+            get {
+                return ResourceManager.GetString("DivergingName", resourceCulture);
+            }
+        }
+        
         internal static System.Drawing.Bitmap document__minus {
             get {
                 object obj = ResourceManager.GetObject("document--minus", resourceCulture);
@@ -265,6 +362,15 @@
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to None.
+        /// </summary>
+        internal static string EmptyText {
+            get {
+                return ResourceManager.GetString("EmptyText", resourceCulture);
+            }
+        }
+        
         internal static System.Drawing.Bitmap exclamation {
             get {
                 object obj = ResourceManager.GetObject("exclamation", resourceCulture);
@@ -273,6 +379,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Expression....
+        /// </summary>
+        internal static string ExpressionItem {
+            get {
+                return ResourceManager.GetString("ExpressionItem", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Extended class based on: {0}.
         /// </summary>
         internal static string ExtendedClassTooltip {
@@ -347,6 +462,15 @@
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Cannot Preview Font &quot;{0}&quot;.
+        /// </summary>
+        internal static string FontPreviewError {
+            get {
+                return ResourceManager.GetString("FontPreviewError", resourceCulture);
+            }
+        }
+        
         internal static System.Drawing.Bitmap function {
             get {
                 object obj = ResourceManager.GetObject("function", resourceCulture);
@@ -372,6 +496,47 @@
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to An error occured: {0}.
+        /// </summary>
+        internal static string GenericError {
+            get {
+                return ResourceManager.GetString("GenericError", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; standalone=&quot;yes&quot;?&gt;
+        ///&lt;ComboBoxDataSet&gt;
+        ///	&lt;SymbolMark&gt;
+        ///		&lt;Display&gt;Square&lt;/Display&gt;
+        ///		&lt;Value&gt;Square&lt;/Value&gt;
+        ///	&lt;/SymbolMark&gt;
+        ///	&lt;SymbolMark&gt;
+        ///		&lt;Display&gt;Circle&lt;/Display&gt;
+        ///		&lt;Value&gt;Circle&lt;/Value&gt;
+        ///	&lt;/SymbolMark&gt;
+        ///	&lt;SymbolMark&gt;
+        ///		&lt;Display&gt;Triangle&lt;/Display&gt;
+        ///		&lt;Value&gt;Triangle&lt;/Value&gt;
+        ///	&lt;/SymbolMark&gt;
+        ///	&lt;SymbolMark&gt;
+        ///		&lt;Display&gt;Star&lt;/Display&gt;
+        ///		&lt;Value&gt;Star&lt;/Value&gt;
+        ///	&lt;/SymbolMark&gt;
+        ///	&lt;SymbolMark&gt;
+        ///		&lt;Display&gt;Cross&lt;/Display&gt;
+        ///		&lt;Value&gt;Cross&lt;/Value&gt;
+        ///	&lt;/SymbolMark&gt;
+        ///	&lt;SymbolMark&gt;
+        ///		&lt;Display&gt;X -  [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string GeometryStyleComboDataset {
+            get {
+                return ResourceManager.GetString("GeometryStyleComboDataset", resourceCulture);
+            }
+        }
+        
         internal static System.Drawing.Bitmap globe__arrow {
             get {
                 object obj = ResourceManager.GetObject("globe--arrow", resourceCulture);
@@ -417,6 +582,51 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to You have entered a non-numeric value in the Reference Y field. Due to a bug in MapGuide, this will likely give an error when saving..
+        /// </summary>
+        internal static string InsertionPointYError {
+            get {
+                return ResourceManager.GetString("InsertionPointYError", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Invalid {0} color component {1} in line {2}.
+        /// </summary>
+        internal static string InvalidColorComponent {
+            get {
+                return ResourceManager.GetString("InvalidColorComponent", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Invalid column name.
+        /// </summary>
+        internal static string InvalidColumnNameError {
+            get {
+                return ResourceManager.GetString("InvalidColumnNameError", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Invalid field count in line {0}.
+        /// </summary>
+        internal static string InvalidFieldCountError {
+            get {
+                return ResourceManager.GetString("InvalidFieldCountError", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Invalid record count in line {0}.
+        /// </summary>
+        internal static string InvalidRecordCountError {
+            get {
+                return ResourceManager.GetString("InvalidRecordCountError", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Invalid value.
         /// </summary>
         internal static string InvalidValueError {
@@ -460,6 +670,15 @@
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Less than {0}.
+        /// </summary>
+        internal static string LessThanLabel {
+            get {
+                return ResourceManager.GetString("LessThanLabel", resourceCulture);
+            }
+        }
+        
         internal static System.Drawing.Bitmap magnifier {
             get {
                 object obj = ResourceManager.GetObject("magnifier", resourceCulture);
@@ -482,6 +701,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Missing column &quot;{0}&quot;.
+        /// </summary>
+        internal static string MissingColumnError {
+            get {
+                return ResourceManager.GetString("MissingColumnError", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to More colors....
         /// </summary>
         internal static string MoreColorsName {
@@ -491,6 +719,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to More than {0}.
+        /// </summary>
+        internal static string MoreThanLabel {
+            get {
+                return ResourceManager.GetString("MoreThanLabel", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to No values found in selected column.
         /// </summary>
         internal static string NoColumnValuesError {
@@ -523,6 +760,15 @@
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Qualitative.
+        /// </summary>
+        internal static string QualitativeName {
+            get {
+                return ResourceManager.GetString("QualitativeName", resourceCulture);
+            }
+        }
+        
         internal static System.Drawing.Bitmap ruler {
             get {
                 object obj = ResourceManager.GetObject("ruler", resourceCulture);
@@ -544,6 +790,24 @@
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to &lt;Select column&gt;.
+        /// </summary>
+        internal static string SelectColumnPlaceholder {
+            get {
+                return ResourceManager.GetString("SelectColumnPlaceholder", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Sequential.
+        /// </summary>
+        internal static string SequentialName {
+            get {
+                return ResourceManager.GetString("SequentialName", resourceCulture);
+            }
+        }
+        
         internal static System.Drawing.Bitmap server {
             get {
                 object obj = ResourceManager.GetObject("server", resourceCulture);
@@ -600,6 +864,15 @@
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Only symbols of type &quot;Mark&quot; and &quot;Font&quot; are currently supported.
+        /// </summary>
+        internal static string SymbolTypeNotSupported {
+            get {
+                return ResourceManager.GetString("SymbolTypeNotSupported", resourceCulture);
+            }
+        }
+        
         internal static System.Drawing.Bitmap table {
             get {
                 object obj = ResourceManager.GetObject("table", resourceCulture);
@@ -647,6 +920,44 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to The selected column contains more than {0} different values, and thus cannot be used for theming with individual values.
+        /// </summary>
+        internal static string TooManyIndiviualValuesError {
+            get {
+                return ResourceManager.GetString("TooManyIndiviualValuesError", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to You are creating a large number of rules, this will likely result in Maestro becoming unresponsive.
+        ///Do you want to continue?.
+        /// </summary>
+        internal static string TooManyRulesWarning {
+            get {
+                return ResourceManager.GetString("TooManyRulesWarning", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to The selected column contains more than {0} different values, and thus cannot be used for theming.
+        /// </summary>
+        internal static string TooManyValuesError {
+            get {
+                return ResourceManager.GetString("TooManyValuesError", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to The selected column contains more than {0} different values.
+        ///The calculated averages only accounts for the first {0} distinct values..
+        /// </summary>
+        internal static string TooMuchDataWarning {
+            get {
+                return ResourceManager.GetString("TooMuchDataWarning", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Transparent.
         /// </summary>
         internal static string TransparentName {

Modified: sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx	2010-07-23 01:43:33 UTC (rev 5049)
+++ sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx	2010-07-23 12:38:06 UTC (rev 5050)
@@ -385,4 +385,118 @@
   <data name="ExtendedClassTooltip" xml:space="preserve">
     <value>Extended class based on: {0}</value>
   </data>
+  <data name="CommandTypesDataset" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\CommandTypesDataset.xml;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
+  </data>
+  <data name="GeometryStyleComboDataset" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\GeometryStyleComboDataset.xml;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="ExpressionItem" xml:space="preserve">
+    <value>Expression...</value>
+    <comment>A value displayed in the combobox to activate the expression builder</comment>
+  </data>
+  <data name="EmptyText" xml:space="preserve">
+    <value>None</value>
+    <comment>The text used for rendering examples with no text data</comment>
+  </data>
+  <data name="ColorCountError" xml:space="preserve">
+    <value>Failed to read {0} color(s) in line {1}</value>
+    <comment>An error message that is displayed if the expected color count does not match the actual count</comment>
+  </data>
+  <data name="DivergingName" xml:space="preserve">
+    <value>Diverging</value>
+    <comment>A display name for the Diverging data type</comment>
+  </data>
+  <data name="InvalidColorComponent" xml:space="preserve">
+    <value>Invalid {0} color component {1} in line {2}</value>
+    <comment>An error message that is displayed if a color component is outside the [0-255] range.
+{0} is the color component, eg. R, G or B
+{1} is the value read
+{2} is the line where the error was encountered</comment>
+  </data>
+  <data name="InvalidFieldCountError" xml:space="preserve">
+    <value>Invalid field count in line {0}</value>
+    <comment>An error message that is displayed if the file has an invalid field count</comment>
+  </data>
+  <data name="InvalidRecordCountError" xml:space="preserve">
+    <value>Invalid record count in line {0}</value>
+    <comment>An error message that is displayed if the file has an invalid error count</comment>
+  </data>
+  <data name="MissingColumnError" xml:space="preserve">
+    <value>Missing column "{0}"</value>
+    <comment>An error message that is displayed if the file is missing a required column</comment>
+  </data>
+  <data name="QualitativeName" xml:space="preserve">
+    <value>Qualitative</value>
+    <comment>A display name for the Qualitative data type</comment>
+  </data>
+  <data name="SequentialName" xml:space="preserve">
+    <value>Sequential</value>
+    <comment>A display name for the Sequential data type</comment>
+  </data>
+  <data name="BetweenLabel" xml:space="preserve">
+    <value>Between {0} and {1}</value>
+    <comment>The label used for all "between" values in the graduated theme set</comment>
+  </data>
+  <data name="ColumnHasNoValidDataError" xml:space="preserve">
+    <value>The selected column had no non-null values and cannot be used.</value>
+    <comment>An error message that is displayed if the user selects a column with no valid data</comment>
+  </data>
+  <data name="DataReadError" xml:space="preserve">
+    <value>Unable to read data from the selected column: {0}</value>
+    <comment>An error message that is displayed when the column read fails</comment>
+  </data>
+  <data name="GenericError" xml:space="preserve">
+    <value>An error occured: {0}</value>
+    <comment>An error message that is displayed when an unexpected error occurs</comment>
+  </data>
+  <data name="InvalidColumnNameError" xml:space="preserve">
+    <value>Invalid column name</value>
+    <comment>An error message that is displayed when the column selected does not exist</comment>
+  </data>
+  <data name="LessThanLabel" xml:space="preserve">
+    <value>Less than {0}</value>
+    <comment>The label used for the lowest value in the graduated theme set</comment>
+  </data>
+  <data name="MoreThanLabel" xml:space="preserve">
+    <value>More than {0}</value>
+    <comment>The label used for the highest value in the graduated theme set</comment>
+  </data>
+  <data name="SelectColumnPlaceholder" xml:space="preserve">
+    <value>&lt;Select column&gt;</value>
+    <comment>A placeholder message displayed when the user has not yet selected a column</comment>
+  </data>
+  <data name="TooManyIndiviualValuesError" xml:space="preserve">
+    <value>The selected column contains more than {0} different values, and thus cannot be used for theming with individual values</value>
+    <comment>An error message that is displayed if the selected column has too many distinct values</comment>
+  </data>
+  <data name="TooManyRulesWarning" xml:space="preserve">
+    <value>You are creating a large number of rules, this will likely result in Maestro becoming unresponsive.
+Do you want to continue?</value>
+    <comment>A warning message that is displayed if the user has selected options that will generate a very large number of rules</comment>
+  </data>
+  <data name="TooManyValuesError" xml:space="preserve">
+    <value>The selected column contains more than {0} different values, and thus cannot be used for theming</value>
+    <comment>An error message that is displayed if the selected column has too many distinct values</comment>
+  </data>
+  <data name="TooMuchDataWarning" xml:space="preserve">
+    <value>The selected column contains more than {0} different values.
+The calculated averages only accounts for the first {0} distinct values.</value>
+    <comment>A warning message that is displayed if the dataset is too large</comment>
+  </data>
+  <data name="FontPreviewError" xml:space="preserve">
+    <value>Cannot Preview Font "{0}"</value>
+    <comment>An error message that is displayed when the rendering fails, using the specified font</comment>
+  </data>
+  <data name="InsertionPointYError" xml:space="preserve">
+    <value>You have entered a non-numeric value in the Reference Y field. Due to a bug in MapGuide, this will likely give an error when saving.</value>
+    <comment>An error message that is displayed if the user attempts to use an expression as the InsertionPointY value (caused by an xsd bug in MapGuide)</comment>
+  </data>
+  <data name="SymbolTypeNotSupported" xml:space="preserve">
+    <value>Only symbols of type "Mark" and "Font" are currently supported</value>
+    <comment>A message that is displayed when the user attempts to modify an item with an unsupported type</comment>
+  </data>
+  <data name="ColorBrewer" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\ColorBrewer.csv;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
 </root>
\ No newline at end of file

Copied: sandbox/maestro-3.0/Maestro.Editors/Resources/ColorBrewer.csv (from rev 5035, trunk/Tools/Maestro/Maestro/ResourceEditors/ColorBrewer.csv)
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Resources/ColorBrewer.csv	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/Resources/ColorBrewer.csv	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,1713 @@
+"ColorName","NumOfColors","Type","CritVal","ColorNum","ColorLetter","R","G","B","SchemeType"
+"Accent",3,"qual",,1,"A",127,201,127,"Qualitative"
+,,,,2,"B",190,174,212,
+,,,,3,"C",253,192,134,
+"Accent",4,"qual",,1,"A",127,201,127,
+,,,,2,"B",190,174,212,
+,,,,3,"C",253,192,134,
+,,,,4,"D",255,255,153,
+"Accent",5,"qual",,1,"A",127,201,127,
+,,,,2,"B",190,174,212,
+,,,,3,"C",253,192,134,
+,,,,4,"D",255,255,153,
+,,,,5,"E",56,108,176,
+"Accent",6,"qual",,1,"A",127,201,127,
+,,,,2,"B",190,174,212,
+,,,,3,"C",253,192,134,
+,,,,4,"D",255,255,153,
+,,,,5,"E",56,108,176,
+,,,,6,"F",240,2,127,
+"Accent",7,"qual",,1,"A",127,201,127,
+,,,,2,"B",190,174,212,
+,,,,3,"C",253,192,134,
+,,,,4,"D",255,255,153,
+,,,,5,"E",56,108,176,
+,,,,6,"F",240,2,127,
+,,,,7,"G",191,91,23,
+"Accent",8,"qual",,1,"A",127,201,127,
+,,,,2,"B",190,174,212,
+,,,,3,"C",253,192,134,
+,,,,4,"D",255,255,153,
+,,,,5,"E",56,108,176,
+,,,,6,"F",240,2,127,
+,,,,7,"G",191,91,23,
+,,,,8,"H",102,102,102,
+"Blues",3,"seq",,1,"C",222,235,247,"Sequential"
+,,,,2,"F",158,202,225,
+,,,,3,"I",49,130,189,
+"Blues",4,"seq",,1,"B",239,243,255,
+,,,,2,"E",189,215,231,
+,,,,3,"G",107,174,214,
+,,,,4,"J",33,113,181,
+"Blues",5,"seq",,1,"B",239,243,255,
+,,,,2,"E",189,215,231,
+,,,,3,"G",107,174,214,
+,,,,4,"I",49,130,189,
+,,,,5,"K",8,81,156,
+"Blues",6,"seq",,1,"B",239,243,255,
+,,,,2,"D",198,219,239,
+,,,,3,"F",158,202,225,
+,,,,4,"G",107,174,214,
+,,,,5,"I",49,130,189,
+,,,,6,"K",8,81,156,
+"Blues",7,"seq",,1,"B",239,243,255,
+,,,,2,"D",198,219,239,
+,,,,3,"F",158,202,225,
+,,,,4,"G",107,174,214,
+,,,,5,"H",66,146,198,
+,,,,6,"J",33,113,181,
+,,,,7,"L",8,69,148,
+"Blues",8,"seq",,1,"A",247,251,255,
+,,,,2,"C",222,235,247,
+,,,,3,"D",198,219,239,
+,,,,4,"F",158,202,225,
+,,,,5,"G",107,174,214,
+,,,,6,"H",66,146,198,
+,,,,7,"J",33,113,181,
+,,,,8,"L",8,69,148,
+"Blues",9,"seq",,1,"A",247,251,255,
+,,,,2,"C",222,235,247,
+,,,,3,"D",198,219,239,
+,,,,4,"F",158,202,225,
+,,,,5,"G",107,174,214,
+,,,,6,"H",66,146,198,
+,,,,7,"J",33,113,181,
+,,,,8,"K",8,81,156,
+,,,,9,"M",8,48,107,
+"BrBG",3,"div",2,1,"E",216,179,101,"Diverging"
+,,,,2,"H",245,245,245,
+,,,,3,"K",90,180,172,
+"BrBG",4,"div","2,5",1,"C",166,97,26,
+,,,,2,"F",223,194,125,
+,,,,3,"J",128,205,193,
+,,,,4,"M",1,133,113,
+"BrBG",5,"div",3,1,"C",166,97,26,
+,,,,2,"F",223,194,125,
+,,,,3,"H",245,245,245,
+,,,,4,"J",128,205,193,
+,,,,5,"M",1,133,113,
+"BrBG",6,"div","3,5",1,"B",140,81,10,
+,,,,2,"E",216,179,101,
+,,,,3,"G",246,232,195,
+,,,,4,"I",199,234,229,
+,,,,5,"K",90,180,172,
+,,,,6,"N",1,102,94,
+"BrBG",7,"div",4,1,"B",140,81,10,
+,,,,2,"E",216,179,101,
+,,,,3,"G",246,232,195,
+,,,,4,"H",245,245,245,
+,,,,5,"I",199,234,229,
+,,,,6,"K",90,180,172,
+,,,,7,"N",1,102,94,
+"BrBG",8,"div","4,5",1,"B",140,81,10,
+,,,,2,"D",191,129,45,
+,,,,3,"F",223,194,125,
+,,,,4,"G",246,232,195,
+,,,,5,"I",199,234,229,
+,,,,6,"J",128,205,193,
+,,,,7,"L",53,151,143,
+,,,,8,"N",1,102,94,
+"BrBG",9,"div",5,1,"B",140,81,10,
+,,,,2,"D",191,129,45,
+,,,,3,"F",223,194,125,
+,,,,4,"G",246,232,195,
+,,,,5,"H",245,245,245,
+,,,,6,"I",199,234,229,
+,,,,7,"J",128,205,193,
+,,,,8,"L",53,151,143,
+,,,,9,"N",1,102,94,
+"BrBG",10,"div","5,5",1,"A",84,48,5,
+,,,,2,"B",140,81,10,
+,,,,3,"D",191,129,45,
+,,,,4,"F",223,194,125,
+,,,,5,"G",246,232,195,
+,,,,6,"I",199,234,229,
+,,,,7,"J",128,205,193,
+,,,,8,"L",53,151,143,
+,,,,9,"N",1,102,94,
+,,,,10,"O",0,60,48,
+"BrBG",11,"div",6,1,"A",84,48,5,
+,,,,2,"B",140,81,10,
+,,,,3,"D",191,129,45,
+,,,,4,"F",223,194,125,
+,,,,5,"G",246,232,195,
+,,,,6,"H",245,245,245,
+,,,,7,"I",199,234,229,
+,,,,8,"J",128,205,193,
+,,,,9,"L",53,151,143,
+,,,,10,"N",1,102,94,
+,,,,11,"O",0,60,48,
+"BuGn",3,"seq",,1,"C",229,245,249,"Sequential"
+,,,,2,"F",153,216,201,
+,,,,3,"I",44,162,95,
+"BuGn",4,"seq",,1,"B",237,248,251,
+,,,,2,"E",178,226,226,
+,,,,3,"G",102,194,164,
+,,,,4,"J",35,139,69,
+"BuGn",5,"seq",,1,"B",237,248,251,
+,,,,2,"E",178,226,226,
+,,,,3,"G",102,194,164,
+,,,,4,"I",44,162,95,
+,,,,5,"K",0,109,44,
+"BuGn",6,"seq",,1,"B",237,248,251,
+,,,,2,"D",204,236,230,
+,,,,3,"F",153,216,201,
+,,,,4,"G",102,194,164,
+,,,,5,"I",44,162,95,
+,,,,6,"K",0,109,44,
+"BuGn",7,"seq",,1,"B",237,248,251,
+,,,,2,"D",204,236,230,
+,,,,3,"F",153,216,201,
+,,,,4,"G",102,194,164,
+,,,,5,"H",65,174,118,
+,,,,6,"J",35,139,69,
+,,,,7,"L",0,88,36,
+"BuGn",8,"seq",,1,"A",247,252,253,
+,,,,2,"C",229,245,249,
+,,,,3,"D",204,236,230,
+,,,,4,"F",153,216,201,
+,,,,5,"G",102,194,164,
+,,,,6,"H",65,174,118,
+,,,,7,"J",35,139,69,
+,,,,8,"L",0,88,36,
+"BuGn",9,"seq",,1,"A",247,252,253,
+,,,,2,"C",229,245,249,
+,,,,3,"D",204,236,230,
+,,,,4,"F",153,216,201,
+,,,,5,"G",102,194,164,
+,,,,6,"H",65,174,118,
+,,,,7,"J",35,139,69,
+,,,,8,"K",0,109,44,
+,,,,9,"M",0,68,27,
+"BuPu",3,"seq",,1,"C",224,236,244,"Sequential"
+,,,,2,"F",158,188,218,
+,,,,3,"I",136,86,167,
+"BuPu",4,"seq",,1,"B",237,248,251,
+,,,,2,"E",179,205,227,
+,,,,3,"G",140,150,198,
+,,,,4,"J",136,65,157,
+"BuPu",5,"seq",,1,"B",237,248,251,
+,,,,2,"E",179,205,227,
+,,,,3,"G",140,150,198,
+,,,,4,"I",136,86,167,
+,,,,5,"K",129,15,124,
+"BuPu",6,"seq",,1,"B",237,248,251,
+,,,,2,"D",191,211,230,
+,,,,3,"F",158,188,218,
+,,,,4,"G",140,150,198,
+,,,,5,"I",136,86,167,
+,,,,6,"K",129,15,124,
+"BuPu",7,"seq",,1,"B",237,248,251,
+,,,,2,"D",191,211,230,
+,,,,3,"F",158,188,218,
+,,,,4,"G",140,150,198,
+,,,,5,"H",140,107,177,
+,,,,6,"J",136,65,157,
+,,,,7,"L",110,1,107,
+"BuPu",8,"seq",,1,"A",247,252,253,
+,,,,2,"C",224,236,244,
+,,,,3,"D",191,211,230,
+,,,,4,"F",158,188,218,
+,,,,5,"G",140,150,198,
+,,,,6,"H",140,107,177,
+,,,,7,"J",136,65,157,
+,,,,8,"L",110,1,107,
+"BuPu",9,"seq",,1,"A",247,252,253,
+,,,,2,"C",224,236,244,
+,,,,3,"D",191,211,230,
+,,,,4,"F",158,188,218,
+,,,,5,"G",140,150,198,
+,,,,6,"H",140,107,177,
+,,,,7,"J",136,65,157,
+,,,,8,"K",129,15,124,
+,,,,9,"M",77,0,75,
+"Dark2",3,"qual",,1,"A",27,158,119,"Qualitative"
+,,,,2,"B",217,95,2,
+,,,,3,"C",117,112,179,
+"Dark2",4,"qual",,1,"A",27,158,119,
+,,,,2,"B",217,95,2,
+,,,,3,"C",117,112,179,
+,,,,4,"D",231,41,138,
+"Dark2",5,"qual",,1,"A",27,158,119,
+,,,,2,"B",217,95,2,
+,,,,3,"C",117,112,179,
+,,,,4,"D",231,41,138,
+,,,,5,"E",102,166,30,
+"Dark2",6,"qual",,1,"A",27,158,119,
+,,,,2,"B",217,95,2,
+,,,,3,"C",117,112,179,
+,,,,4,"D",231,41,138,
+,,,,5,"E",102,166,30,
+,,,,6,"F",230,171,2,
+"Dark2",7,"qual",,1,"A",27,158,119,
+,,,,2,"B",217,95,2,
+,,,,3,"C",117,112,179,
+,,,,4,"D",231,41,138,
+,,,,5,"E",102,166,30,
+,,,,6,"F",230,171,2,
+,,,,7,"G",166,118,29,
+"Dark2",8,"qual",,1,"A",27,158,119,
+,,,,2,"B",217,95,2,
+,,,,3,"C",117,112,179,
+,,,,4,"D",231,41,138,
+,,,,5,"E",102,166,30,
+,,,,6,"F",230,171,2,
+,,,,7,"G",166,118,29,
+,,,,8,"H",102,102,102,
+"GnBu",3,"seq",,1,"C",224,243,219,"Sequential"
+,,,,2,"F",168,221,181,
+,,,,3,"I",67,162,202,
+"GnBu",4,"seq",,1,"B",240,249,232,
+,,,,2,"E",186,228,188,
+,,,,3,"G",123,204,196,
+,,,,4,"J",43,140,190,
+"GnBu",5,"seq",,1,"B",240,249,232,
+,,,,2,"E",186,228,188,
+,,,,3,"G",123,204,196,
+,,,,4,"I",67,162,202,
+,,,,5,"K",8,104,172,
+"GnBu",6,"seq",,1,"B",240,249,232,
+,,,,2,"D",204,235,197,
+,,,,3,"F",168,221,181,
+,,,,4,"G",123,204,196,
+,,,,5,"I",67,162,202,
+,,,,6,"K",8,104,172,
+"GnBu",7,"seq",,1,"B",240,249,232,
+,,,,2,"D",204,235,197,
+,,,,3,"F",168,221,181,
+,,,,4,"G",123,204,196,
+,,,,5,"H",78,179,211,
+,,,,6,"J",43,140,190,
+,,,,7,"L",8,88,158,
+"GnBu",8,"seq",,1,"A",247,252,240,
+,,,,2,"C",224,243,219,
+,,,,3,"D",204,235,197,
+,,,,4,"F",168,221,181,
+,,,,5,"G",123,204,196,
+,,,,6,"H",78,179,211,
+,,,,7,"J",43,140,190,
+,,,,8,"L",8,88,158,
+"GnBu",9,"seq",,1,"A",247,252,240,
+,,,,2,"C",224,243,219,
+,,,,3,"D",204,235,197,
+,,,,4,"F",168,221,181,
+,,,,5,"G",123,204,196,
+,,,,6,"H",78,179,211,
+,,,,7,"J",43,140,190,
+,,,,8,"K",8,104,172,
+,,,,9,"M",8,64,129,
+"Greens",3,"seq",,1,"C",229,245,224,"Sequential"
+,,,,2,"F",161,217,155,
+,,,,3,"I",49,163,84,
+"Greens",4,"seq",,1,"B",237,248,233,
+,,,,2,"E",186,228,179,
+,,,,3,"G",116,196,118,
+,,,,4,"J",35,139,69,
+"Greens",5,"seq",,1,"B",237,248,233,
+,,,,2,"E",186,228,179,
+,,,,3,"G",116,196,118,
+,,,,4,"I",49,163,84,
+,,,,5,"K",0,109,44,
+"Greens",6,"seq",,1,"B",237,248,233,
+,,,,2,"D",199,233,192,
+,,,,3,"F",161,217,155,
+,,,,4,"G",116,196,118,
+,,,,5,"I",49,163,84,
+,,,,6,"K",0,109,44,
+"Greens",7,"seq",,1,"B",237,248,233,
+,,,,2,"D",199,233,192,
+,,,,3,"F",161,217,155,
+,,,,4,"G",116,196,118,
+,,,,5,"H",65,171,93,
+,,,,6,"J",35,139,69,
+,,,,7,"L",0,90,50,
+"Greens",8,"seq",,1,"A",247,252,245,
+,,,,2,"C",229,245,224,
+,,,,3,"D",199,233,192,
+,,,,4,"F",161,217,155,
+,,,,5,"G",116,196,118,
+,,,,6,"H",65,171,93,
+,,,,7,"J",35,139,69,
+,,,,8,"L",0,90,50,
+"Greens",9,"seq",,1,"A",247,252,245,
+,,,,2,"C",229,245,224,
+,,,,3,"D",199,233,192,
+,,,,4,"F",161,217,155,
+,,,,5,"G",116,196,118,
+,,,,6,"H",65,171,93,
+,,,,7,"J",35,139,69,
+,,,,8,"K",0,109,44,
+,,,,9,"M",0,68,27,
+"Greys",3,"seq",,1,"C",240,240,240,"Sequential"
+,,,,2,"F",189,189,189,
+,,,,3,"I",99,99,99,
+"Greys",4,"seq",,1,"B",247,247,247,
+,,,,2,"E",204,204,204,
+,,,,3,"G",150,150,150,
+,,,,4,"J",82,82,82,
+"Greys",5,"seq",,1,"B",247,247,247,
+,,,,2,"E",204,204,204,
+,,,,3,"G",150,150,150,
+,,,,4,"I",99,99,99,
+,,,,5,"K",37,37,37,
+"Greys",6,"seq",,1,"B",247,247,247,
+,,,,2,"D",217,217,217,
+,,,,3,"F",189,189,189,
+,,,,4,"G",150,150,150,
+,,,,5,"I",99,99,99,
+,,,,6,"K",37,37,37,
+"Greys",7,"seq",,1,"B",247,247,247,
+,,,,2,"D",217,217,217,
+,,,,3,"F",189,189,189,
+,,,,4,"G",150,150,150,
+,,,,5,"H",115,115,115,
+,,,,6,"J",82,82,82,
+,,,,7,"L",37,37,37,
+"Greys",8,"seq",,1,"A",255,255,255,
+,,,,2,"C",240,240,240,
+,,,,3,"D",217,217,217,
+,,,,4,"F",189,189,189,
+,,,,5,"G",150,150,150,
+,,,,6,"H",115,115,115,
+,,,,7,"J",82,82,82,
+,,,,8,"L",37,37,37,
+"Greys",9,"seq",,1,"A",255,255,255,
+,,,,2,"C",240,240,240,
+,,,,3,"D",217,217,217,
+,,,,4,"F",189,189,189,
+,,,,5,"G",150,150,150,
+,,,,6,"H",115,115,115,
+,,,,7,"J",82,82,82,
+,,,,8,"K",37,37,37,
+,,,,9,"M",0,0,0,
+"Oranges",3,"seq",,1,"C",254,230,206,"Sequential"
+,,,,2,"F",253,174,107,
+,,,,3,"I",230,85,13,
+"Oranges",4,"seq",,1,"B",254,237,222,
+,,,,2,"E",253,190,133,
+,,,,3,"G",253,141,60,
+,,,,4,"J",217,71,1,
+"Oranges",5,"seq",,1,"B",254,237,222,
+,,,,2,"E",253,190,133,
+,,,,3,"G",253,141,60,
+,,,,4,"I",230,85,13,
+,,,,5,"K",166,54,3,
+"Oranges",6,"seq",,1,"B",254,237,222,
+,,,,2,"D",253,208,162,
+,,,,3,"F",253,174,107,
+,,,,4,"G",253,141,60,
+,,,,5,"I",230,85,13,
+,,,,6,"K",166,54,3,
+"Oranges",7,"seq",,1,"B",254,237,222,
+,,,,2,"D",253,208,162,
+,,,,3,"F",253,174,107,
+,,,,4,"G",253,141,60,
+,,,,5,"H",241,105,19,
+,,,,6,"J",217,72,1,
+,,,,7,"L",140,45,4,
+"Oranges",8,"seq",,1,"A",255,245,235,
+,,,,2,"C",254,230,206,
+,,,,3,"D",253,208,162,
+,,,,4,"F",253,174,107,
+,,,,5,"G",253,141,60,
+,,,,6,"H",241,105,19,
+,,,,7,"J",217,72,1,
+,,,,8,"L",140,45,4,
+"Oranges",9,"seq",,1,"A",255,245,235,
+,,,,2,"C",254,230,206,
+,,,,3,"D",253,208,162,
+,,,,4,"F",253,174,107,
+,,,,5,"G",253,141,60,
+,,,,6,"H",241,105,19,
+,,,,7,"J",217,72,1,
+,,,,8,"K",166,54,3,
+,,,,9,"M",127,39,4,
+"OrRd",3,"seq",,1,"C",254,232,200,"Sequential"
+,,,,2,"F",253,187,132,
+,,,,3,"I",227,74,51,
+"OrRd",4,"seq",,1,"B",254,240,217,
+,,,,2,"E",253,204,138,
+,,,,3,"G",252,141,89,
+,,,,4,"J",215,48,31,
+"OrRd",5,"seq",,1,"B",254,240,217,
+,,,,2,"E",253,204,138,
+,,,,3,"G",252,141,89,
+,,,,4,"I",227,74,51,
+,,,,5,"K",179,0,0,
+"OrRd",6,"seq",,1,"B",254,240,217,
+,,,,2,"D",253,212,158,
+,,,,3,"F",253,187,132,
+,,,,4,"G",252,141,89,
+,,,,5,"I",227,74,51,
+,,,,6,"K",179,0,0,
+"OrRd",7,"seq",,1,"B",254,240,217,
+,,,,2,"D",253,212,158,
+,,,,3,"F",253,187,132,
+,,,,4,"G",252,141,89,
+,,,,5,"H",239,101,72,
+,,,,6,"J",215,48,31,
+,,,,7,"L",153,0,0,
+"OrRd",8,"seq",,1,"A",255,247,236,
+,,,,2,"C",254,232,200,
+,,,,3,"D",253,212,158,
+,,,,4,"F",253,187,132,
+,,,,5,"G",252,141,89,
+,,,,6,"H",239,101,72,
+,,,,7,"J",215,48,31,
+,,,,8,"L",153,0,0,
+"OrRd",9,"seq",,1,"A",255,247,236,
+,,,,2,"C",254,232,200,
+,,,,3,"D",253,212,158,
+,,,,4,"F",253,187,132,
+,,,,5,"G",252,141,89,
+,,,,6,"H",239,101,72,
+,,,,7,"J",215,48,31,
+,,,,8,"K",179,0,0,
+,,,,9,"M",127,0,0,
+"Paired",3,"qual",,1,"A",166,206,227,"Qualitative"
+,,,,2,"B",31,120,180,
+,,,,3,"C",178,223,138,
+"Paired",4,"qual",,1,"A",166,206,227,
+,,,,2,"B",31,120,180,
+,,,,3,"C",178,223,138,
+,,,,4,"D",51,160,44,
+"Paired",5,"qual",,1,"A",166,206,227,
+,,,,2,"B",31,120,180,
+,,,,3,"C",178,223,138,
+,,,,4,"D",51,160,44,
+,,,,5,"E",251,154,153,
+"Paired",6,"qual",,1,"A",166,206,227,
+,,,,2,"B",31,120,180,
+,,,,3,"C",178,223,138,
+,,,,4,"D",51,160,44,
+,,,,5,"E",251,154,153,
+,,,,6,"F",227,26,28,
+"Paired",7,"qual",,1,"A",166,206,227,
+,,,,2,"B",31,120,180,
+,,,,3,"C",178,223,138,
+,,,,4,"D",51,160,44,
+,,,,5,"E",251,154,153,
+,,,,6,"F",227,26,28,
+,,,,7,"G",253,191,111,
+"Paired",8,"qual",,1,"A",166,206,227,
+,,,,2,"B",31,120,180,
+,,,,3,"C",178,223,138,
+,,,,4,"D",51,160,44,
+,,,,5,"E",251,154,153,
+,,,,6,"F",227,26,28,
+,,,,7,"G",253,191,111,
+,,,,8,"H",255,127,0,
+"Paired",9,"qual",,1,"A",166,206,227,
+,,,,2,"B",31,120,180,
+,,,,3,"C",178,223,138,
+,,,,4,"D",51,160,44,
+,,,,5,"E",251,154,153,
+,,,,6,"F",227,26,28,
+,,,,7,"G",253,191,111,
+,,,,8,"H",255,127,0,
+,,,,9,"I",202,178,214,
+"Paired",10,"qual",,1,"A",166,206,227,
+,,,,2,"B",31,120,180,
+,,,,3,"C",178,223,138,
+,,,,4,"D",51,160,44,
+,,,,5,"E",251,154,153,
+,,,,6,"F",227,26,28,
+,,,,7,"G",253,191,111,
+,,,,8,"H",255,127,0,
+,,,,9,"I",202,178,214,
+,,,,10,"J",106,61,154,
+"Paired",11,"qual",,1,"A",166,206,227,
+,,,,2,"B",31,120,180,
+,,,,3,"C",178,223,138,
+,,,,4,"D",51,160,44,
+,,,,5,"E",251,154,153,
+,,,,6,"F",227,26,28,
+,,,,7,"G",253,191,111,
+,,,,8,"H",255,127,0,
+,,,,9,"I",202,178,214,
+,,,,10,"J",106,61,154,
+,,,,11,"K",255,255,153,
+"Paired",12,"qual",,1,"A",166,206,227,
+,,,,2,"B",31,120,180,
+,,,,3,"C",178,223,138,
+,,,,4,"D",51,160,44,
+,,,,5,"E",251,154,153,
+,,,,6,"F",227,26,28,
+,,,,7,"G",253,191,111,
+,,,,8,"H",255,127,0,
+,,,,9,"I",202,178,214,
+,,,,10,"J",106,61,154,
+,,,,11,"K",255,255,153,
+,,,,12,"L",177,89,40,
+"Pastel1",3,"qual",,1,"A",251,180,174,"Qualitative"
+,,,,2,"B",179,205,227,
+,,,,3,"C",204,235,197,
+"Pastel1",4,"qual",,1,"A",251,180,174,
+,,,,2,"B",179,205,227,
+,,,,3,"C",204,235,197,
+,,,,4,"D",222,203,228,
+"Pastel1",5,"qual",,1,"A",251,180,174,
+,,,,2,"B",179,205,227,
+,,,,3,"C",204,235,197,
+,,,,4,"D",222,203,228,
+,,,,5,"E",254,217,166,
+"Pastel1",6,"qual",,1,"A",251,180,174,
+,,,,2,"B",179,205,227,
+,,,,3,"C",204,235,197,
+,,,,4,"D",222,203,228,
+,,,,5,"E",254,217,166,
+,,,,6,"F",255,255,204,
+"Pastel1",7,"qual",,1,"A",251,180,174,
+,,,,2,"B",179,205,227,
+,,,,3,"C",204,235,197,
+,,,,4,"D",222,203,228,
+,,,,5,"E",254,217,166,
+,,,,6,"F",255,255,204,
+,,,,7,"G",229,216,189,
+"Pastel1",8,"qual",,1,"A",251,180,174,
+,,,,2,"B",179,205,227,
+,,,,3,"C",204,235,197,
+,,,,4,"D",222,203,228,
+,,,,5,"E",254,217,166,
+,,,,6,"F",255,255,204,
+,,,,7,"G",229,216,189,
+,,,,8,"H",253,218,236,
+"Pastel1",9,"qual",,1,"A",251,180,174,
+,,,,2,"B",179,205,227,
+,,,,3,"C",204,235,197,
+,,,,4,"D",222,203,228,
+,,,,5,"E",254,217,166,
+,,,,6,"F",255,255,204,
+,,,,7,"G",229,216,189,
+,,,,8,"H",253,218,236,
+,,,,9,"I",242,242,242,
+"Pastel2",3,"qual",,1,"A",179,226,205,"Qualitative"
+,,,,2,"B",253,205,172,
+,,,,3,"C",203,213,232,
+"Pastel2",4,"qual",,1,"A",179,226,205,
+,,,,2,"B",253,205,172,
+,,,,3,"C",203,213,232,
+,,,,4,"D",244,202,228,
+"Pastel2",5,"qual",,1,"A",179,226,205,
+,,,,2,"B",253,205,172,
+,,,,3,"C",203,213,232,
+,,,,4,"D",244,202,228,
+,,,,5,"E",230,245,201,
+"Pastel2",6,"qual",,1,"A",179,226,205,
+,,,,2,"B",253,205,172,
+,,,,3,"C",203,213,232,
+,,,,4,"D",244,202,228,
+,,,,5,"E",230,245,201,
+,,,,6,"F",255,242,174,
+"Pastel2",7,"qual",,1,"A",179,226,205,
+,,,,2,"B",253,205,172,
+,,,,3,"C",203,213,232,
+,,,,4,"D",244,202,228,
+,,,,5,"E",230,245,201,
+,,,,6,"F",255,242,174,
+,,,,7,"G",241,226,204,
+"Pastel2",8,"qual",,1,"A",179,226,205,
+,,,,2,"B",253,205,172,
+,,,,3,"C",203,213,232,
+,,,,4,"D",244,202,228,
+,,,,5,"E",230,245,201,
+,,,,6,"F",255,242,174,
+,,,,7,"G",241,226,204,
+,,,,8,"H",204,204,204,
+"PiYG",3,"div",2,1,"E",233,163,201,"Diverging"
+,,,,2,"H",247,247,247,
+,,,,3,"K",161,215,106,
+"PiYG",4,"div","2,5",1,"C",208,28,139,
+,,,,2,"F",241,182,218,
+,,,,3,"J",184,225,134,
+,,,,4,"M",77,172,38,
+"PiYG",5,"div",3,1,"C",208,28,139,
+,,,,2,"F",241,182,218,
+,,,,3,"H",247,247,247,
+,,,,4,"J",184,225,134,
+,,,,5,"M",77,172,38,
+"PiYG",6,"div","3,5",1,"B",197,27,125,
+,,,,2,"E",233,163,201,
+,,,,3,"G",253,224,239,
+,,,,4,"I",230,245,208,
+,,,,5,"K",161,215,106,
+,,,,6,"N",77,146,33,
+"PiYG",7,"div",4,1,"B",197,27,125,
+,,,,2,"E",233,163,201,
+,,,,3,"G",253,224,239,
+,,,,4,"H",247,247,247,
+,,,,5,"I",230,245,208,
+,,,,6,"K",161,215,106,
+,,,,7,"N",77,146,33,
+"PiYG",8,"div","4,5",1,"B",197,27,125,
+,,,,2,"D",222,119,174,
+,,,,3,"F",241,182,218,
+,,,,4,"G",253,224,239,
+,,,,5,"I",230,245,208,
+,,,,6,"J",184,225,134,
+,,,,7,"L",127,188,65,
+,,,,8,"N",77,146,33,
+"PiYG",9,"div",5,1,"B",197,27,125,
+,,,,2,"D",222,119,174,
+,,,,3,"F",241,182,218,
+,,,,4,"G",253,224,239,
+,,,,5,"H",247,247,247,
+,,,,6,"I",230,245,208,
+,,,,7,"J",184,225,134,
+,,,,8,"L",127,188,65,
+,,,,9,"N",77,146,33,
+"PiYG",10,"div","5,5",1,"A",142,1,82,
+,,,,2,"B",197,27,125,
+,,,,3,"D",222,119,174,
+,,,,4,"F",241,182,218,
+,,,,5,"G",253,224,239,
+,,,,6,"I",230,245,208,
+,,,,7,"J",184,225,134,
+,,,,8,"L",127,188,65,
+,,,,9,"N",77,146,33,
+,,,,10,"O",39,100,25,
+"PiYG",11,"div",6,1,"A",142,1,82,
+,,,,2,"B",197,27,125,
+,,,,3,"D",222,119,174,
+,,,,4,"F",241,182,218,
+,,,,5,"G",253,224,239,
+,,,,6,"H",247,247,247,
+,,,,7,"I",230,245,208,
+,,,,8,"J",184,225,134,
+,,,,9,"L",127,188,65,
+,,,,10,"N",77,146,33,
+,,,,11,"O",39,100,25,
+"PRGn",3,"div",2,1,"E",175,141,195,"Diverging"
+,,,,2,"H",247,247,247,
+,,,,3,"K",127,191,123,
+"PRGn",4,"div","2,5",1,"C",123,50,148,
+,,,,2,"F",194,165,207,
+,,,,3,"J",166,219,160,
+,,,,4,"M",0,136,55,
+"PRGn",5,"div",3,1,"C",123,50,148,
+,,,,2,"F",194,165,207,
+,,,,3,"H",247,247,247,
+,,,,4,"J",166,219,160,
+,,,,5,"M",0,136,55,
+"PRGn",6,"div","3,5",1,"B",118,42,131,
+,,,,2,"E",175,141,195,
+,,,,3,"G",231,212,232,
+,,,,4,"I",217,240,211,
+,,,,5,"K",127,191,123,
+,,,,6,"N",27,120,55,
+"PRGn",7,"div",4,1,"B",118,42,131,
+,,,,2,"E",175,141,195,
+,,,,3,"G",231,212,232,
+,,,,4,"H",247,247,247,
+,,,,5,"I",217,240,211,
+,,,,6,"K",127,191,123,
+,,,,7,"N",27,120,55,
+"PRGn",8,"div","4,5",1,"B",118,42,131,
+,,,,2,"D",153,112,171,
+,,,,3,"F",194,165,207,
+,,,,4,"G",231,212,232,
+,,,,5,"I",217,240,211,
+,,,,6,"J",166,219,160,
+,,,,7,"L",90,174,97,
+,,,,8,"N",27,120,55,
+"PRGn",9,"div",5,1,"B",118,42,131,
+,,,,2,"D",153,112,171,
+,,,,3,"F",194,165,207,
+,,,,4,"G",231,212,232,
+,,,,5,"H",247,247,247,
+,,,,6,"I",217,240,211,
+,,,,7,"J",166,219,160,
+,,,,8,"L",90,174,97,
+,,,,9,"N",27,120,55,
+"PRGn",10,"div","5,5",1,"A",64,0,75,
+,,,,2,"B",118,42,131,
+,,,,3,"D",153,112,171,
+,,,,4,"F",194,165,207,
+,,,,5,"G",231,212,232,
+,,,,6,"I",217,240,211,
+,,,,7,"J",166,219,160,
+,,,,8,"L",90,174,97,
+,,,,9,"N",27,120,55,
+,,,,10,"O",0,68,27,
+"PRGn",11,"div",6,1,"A",64,0,75,
+,,,,2,"B",118,42,131,
+,,,,3,"D",153,112,171,
+,,,,4,"F",194,165,207,
+,,,,5,"G",231,212,232,
+,,,,6,"H",247,247,247,
+,,,,7,"I",217,240,211,
+,,,,8,"J",166,219,160,
+,,,,9,"L",90,174,97,
+,,,,10,"N",27,120,55,
+,,,,11,"O",0,68,27,
+"PuBu",3,"seq",,1,"C",236,231,242,"Sequential"
+,,,,2,"F",166,189,219,
+,,,,3,"I",43,140,190,
+"PuBu",4,"seq",,1,"B",241,238,246,
+,,,,2,"E",189,201,225,
+,,,,3,"G",116,169,207,
+,,,,4,"J",5,112,176,
+"PuBu",5,"seq",,1,"B",241,238,246,
+,,,,2,"E",189,201,225,
+,,,,3,"G",116,169,207,
+,,,,4,"I",43,140,190,
+,,,,5,"K",4,90,141,
+"PuBu",6,"seq",,1,"B",241,238,246,
+,,,,2,"D",208,209,230,
+,,,,3,"F",166,189,219,
+,,,,4,"G",116,169,207,
+,,,,5,"I",43,140,190,
+,,,,6,"K",4,90,141,
+"PuBu",7,"seq",,1,"B",241,238,246,
+,,,,2,"D",208,209,230,
+,,,,3,"F",166,189,219,
+,,,,4,"G",116,169,207,
+,,,,5,"H",54,144,192,
+,,,,6,"J",5,112,176,
+,,,,7,"L",3,78,123,
+"PuBu",8,"seq",,1,"A",255,247,251,
+,,,,2,"C",236,231,242,
+,,,,3,"D",208,209,230,
+,,,,4,"F",166,189,219,
+,,,,5,"G",116,169,207,
+,,,,6,"H",54,144,192,
+,,,,7,"J",5,112,176,
+,,,,8,"L",3,78,123,
+"PuBu",9,"seq",,1,"A",255,247,251,
+,,,,2,"C",236,231,242,
+,,,,3,"D",208,209,230,
+,,,,4,"F",166,189,219,
+,,,,5,"G",116,169,207,
+,,,,6,"H",54,144,192,
+,,,,7,"J",5,112,176,
+,,,,8,"K",4,90,141,
+,,,,9,"M",2,56,88,
+"PuBuGn",3,"seq",,1,"C",236,226,240,"Sequential"
+,,,,2,"F",166,189,219,
+,,,,3,"I",28,144,153,
+"PuBuGn",4,"seq",,1,"B",246,239,247,
+,,,,2,"E",189,201,225,
+,,,,3,"G",103,169,207,
+,,,,4,"J",2,129,138,
+"PuBuGn",5,"seq",,1,"B",246,239,247,
+,,,,2,"E",189,201,225,
+,,,,3,"G",103,169,207,
+,,,,4,"I",28,144,153,
+,,,,5,"K",1,108,89,
+"PuBuGn",6,"seq",,1,"B",246,239,247,
+,,,,2,"D",208,209,230,
+,,,,3,"F",166,189,219,
+,,,,4,"G",103,169,207,
+,,,,5,"I",28,144,153,
+,,,,6,"K",1,108,89,
+"PuBuGn",7,"seq",,1,"B",246,239,247,
+,,,,2,"D",208,209,230,
+,,,,3,"F",166,189,219,
+,,,,4,"G",103,169,207,
+,,,,5,"H",54,144,192,
+,,,,6,"J",2,129,138,
+,,,,7,"L",1,100,80,
+"PuBuGn",8,"seq",,1,"A",255,247,251,
+,,,,2,"C",236,226,240,
+,,,,3,"D",208,209,230,
+,,,,4,"F",166,189,219,
+,,,,5,"G",103,169,207,
+,,,,6,"H",54,144,192,
+,,,,7,"J",2,129,138,
+,,,,8,"L",1,100,80,
+"PuBuGn",9,"seq",,1,"A",255,247,251,
+,,,,2,"C",236,226,240,
+,,,,3,"D",208,209,230,
+,,,,4,"F",166,189,219,
+,,,,5,"G",103,169,207,
+,,,,6,"H",54,144,192,
+,,,,7,"J",2,129,138,
+,,,,8,"K",1,108,89,
+,,,,9,"M",1,70,54,
+"PuOr",3,"div",2,1,"E",241,163,64,"Diverging"
+,,,,2,"H",247,247,247,
+,,,,3,"K",153,142,195,
+"PuOr",4,"div","2,5",1,"C",230,97,1,
+,,,,2,"F",253,184,99,
+,,,,3,"J",178,171,210,
+,,,,4,"M",94,60,153,
+"PuOr",5,"div",3,1,"C",230,97,1,
+,,,,2,"F",253,184,99,
+,,,,3,"H",247,247,247,
+,,,,4,"J",178,171,210,
+,,,,5,"M",94,60,153,
+"PuOr",6,"div","3,5",1,"B",179,88,6,
+,,,,2,"E",241,163,64,
+,,,,3,"G",254,224,182,
+,,,,4,"I",216,218,235,
+,,,,5,"K",153,142,195,
+,,,,6,"N",84,39,136,
+"PuOr",7,"div",4,1,"B",179,88,6,
+,,,,2,"E",241,163,64,
+,,,,3,"G",254,224,182,
+,,,,4,"H",247,247,247,
+,,,,5,"I",216,218,235,
+,,,,6,"K",153,142,195,
+,,,,7,"N",84,39,136,
+"PuOr",8,"div","4,5",1,"B",179,88,6,
+,,,,2,"D",224,130,20,
+,,,,3,"F",253,184,99,
+,,,,4,"G",254,224,182,
+,,,,5,"I",216,218,235,
+,,,,6,"J",178,171,210,
+,,,,7,"L",128,115,172,
+,,,,8,"N",84,39,136,
+"PuOr",9,"div",5,1,"B",179,88,6,
+,,,,2,"D",224,130,20,
+,,,,3,"F",253,184,99,
+,,,,4,"G",254,224,182,
+,,,,5,"H",247,247,247,
+,,,,6,"I",216,218,235,
+,,,,7,"J",178,171,210,
+,,,,8,"L",128,115,172,
+,,,,9,"N",84,39,136,
+"PuOr",10,"div","5,5",1,"A",127,59,8,
+,,,,2,"B",179,88,6,
+,,,,3,"D",224,130,20,
+,,,,4,"F",253,184,99,
+,,,,5,"G",254,224,182,
+,,,,6,"I",216,218,235,
+,,,,7,"J",178,171,210,
+,,,,8,"L",128,115,172,
+,,,,9,"N",84,39,136,
+,,,,10,"O",45,0,75,
+"PuOr",11,"div",6,1,"A",127,59,8,
+,,,,2,"B",179,88,6,
+,,,,3,"D",224,130,20,
+,,,,4,"F",253,184,99,
+,,,,5,"G",254,224,182,
+,,,,6,"H",247,247,247,
+,,,,7,"I",216,218,235,
+,,,,8,"J",178,171,210,
+,,,,9,"L",128,115,172,
+,,,,10,"N",84,39,136,
+,,,,11,"O",45,0,75,
+"PuRd",3,"seq",,1,"C",231,225,239,"Sequential"
+,,,,2,"F",201,148,199,
+,,,,3,"I",221,28,119,
+"PuRd",4,"seq",,1,"B",241,238,246,
+,,,,2,"E",215,181,216,
+,,,,3,"G",223,101,176,
+,,,,4,"J",206,18,86,
+"PuRd",5,"seq",,1,"B",241,238,246,
+,,,,2,"E",215,181,216,
+,,,,3,"G",223,101,176,
+,,,,4,"I",221,28,119,
+,,,,5,"K",152,0,67,
+"PuRd",6,"seq",,1,"B",241,238,246,
+,,,,2,"D",212,185,218,
+,,,,3,"F",201,148,199,
+,,,,4,"G",223,101,176,
+,,,,5,"I",221,28,119,
+,,,,6,"K",152,0,67,
+"PuRd",7,"seq",,1,"B",241,238,246,
+,,,,2,"D",212,185,218,
+,,,,3,"F",201,148,199,
+,,,,4,"G",223,101,176,
+,,,,5,"H",231,41,138,
+,,,,6,"J",206,18,86,
+,,,,7,"L",145,0,63,
+"PuRd",8,"seq",,1,"A",247,244,249,
+,,,,2,"C",231,225,239,
+,,,,3,"D",212,185,218,
+,,,,4,"F",201,148,199,
+,,,,5,"G",223,101,176,
+,,,,6,"H",231,41,138,
+,,,,7,"J",206,18,86,
+,,,,8,"L",145,0,63,
+"PuRd",9,"seq",,1,"A",247,244,249,
+,,,,2,"C",231,225,239,
+,,,,3,"D",212,185,218,
+,,,,4,"F",201,148,199,
+,,,,5,"G",223,101,176,
+,,,,6,"H",231,41,138,
+,,,,7,"J",206,18,86,
+,,,,8,"K",152,0,67,
+,,,,9,"M",103,0,31,
+"Purples",3,"seq",,1,"C",239,237,245,"Sequential"
+,,,,2,"F",188,189,220,
+,,,,3,"I",117,107,177,
+"Purples",4,"seq",,1,"B",242,240,247,
+,,,,2,"E",203,201,226,
+,,,,3,"G",158,154,200,
+,,,,4,"J",106,81,163,
+"Purples",5,"seq",,1,"B",242,240,247,
+,,,,2,"E",203,201,226,
+,,,,3,"G",158,154,200,
+,,,,4,"I",117,107,177,
+,,,,5,"K",84,39,143,
+"Purples",6,"seq",,1,"B",242,240,247,
+,,,,2,"D",218,218,235,
+,,,,3,"F",188,189,220,
+,,,,4,"G",158,154,200,
+,,,,5,"I",117,107,177,
+,,,,6,"K",84,39,143,
+"Purples",7,"seq",,1,"B",242,240,247,
+,,,,2,"D",218,218,235,
+,,,,3,"F",188,189,220,
+,,,,4,"G",158,154,200,
+,,,,5,"H",128,125,186,
+,,,,6,"J",106,81,163,
+,,,,7,"L",74,20,134,
+"Purples",8,"seq",,1,"A",252,251,253,
+,,,,2,"C",239,237,245,
+,,,,3,"D",218,218,235,
+,,,,4,"F",188,189,220,
+,,,,5,"G",158,154,200,
+,,,,6,"H",128,125,186,
+,,,,7,"J",106,81,163,
+,,,,8,"L",74,20,134,
+"Purples",9,"seq",,1,"A",252,251,253,
+,,,,2,"C",239,237,245,
+,,,,3,"D",218,218,235,
+,,,,4,"F",188,189,220,
+,,,,5,"G",158,154,200,
+,,,,6,"H",128,125,186,
+,,,,7,"J",106,81,163,
+,,,,8,"K",84,39,143,
+,,,,9,"M",63,0,125,
+"RdBu",3,"div",2,1,"E",239,138,98,"Diverging"
+,,,,2,"H",247,247,247,
+,,,,3,"K",103,169,207,
+"RdBu",4,"div","2,5",1,"C",202,0,32,
+,,,,2,"F",244,165,130,
+,,,,3,"J",146,197,222,
+,,,,4,"M",5,113,176,
+"RdBu",5,"div",3,1,"C",202,0,32,
+,,,,2,"F",244,165,130,
+,,,,3,"H",247,247,247,
+,,,,4,"J",146,197,222,
+,,,,5,"M",5,113,176,
+"RdBu",6,"div","3,5",1,"B",178,24,43,
+,,,,2,"E",239,138,98,
+,,,,3,"G",253,219,199,
+,,,,4,"I",209,229,240,
+,,,,5,"K",103,169,207,
+,,,,6,"N",33,102,172,
+"RdBu",7,"div",4,1,"B",178,24,43,
+,,,,2,"E",239,138,98,
+,,,,3,"G",253,219,199,
+,,,,4,"H",247,247,247,
+,,,,5,"I",209,229,240,
+,,,,6,"K",103,169,207,
+,,,,7,"N",33,102,172,
+"RdBu",8,"div","4,5",1,"B",178,24,43,
+,,,,2,"D",214,96,77,
+,,,,3,"F",244,165,130,
+,,,,4,"G",253,219,199,
+,,,,5,"I",209,229,240,
+,,,,6,"J",146,197,222,
+,,,,7,"L",67,147,195,
+,,,,8,"N",33,102,172,
+"RdBu",9,"div",5,1,"B",178,24,43,
+,,,,2,"D",214,96,77,
+,,,,3,"F",244,165,130,
+,,,,4,"G",253,219,199,
+,,,,5,"H",247,247,247,
+,,,,6,"I",209,229,240,
+,,,,7,"J",146,197,222,
+,,,,8,"L",67,147,195,
+,,,,9,"N",33,102,172,
+"RdBu",10,"div","5,5",1,"A",103,0,31,
+,,,,2,"B",178,24,43,
+,,,,3,"D",214,96,77,
+,,,,4,"F",244,165,130,
+,,,,5,"G",253,219,199,
+,,,,6,"I",209,229,240,
+,,,,7,"J",146,197,222,
+,,,,8,"L",67,147,195,
+,,,,9,"N",33,102,172,
+,,,,10,"O",5,48,97,
+"RdBu",11,"div",6,1,"A",103,0,31,
+,,,,2,"B",178,24,43,
+,,,,3,"D",214,96,77,
+,,,,4,"F",244,165,130,
+,,,,5,"G",253,219,199,
+,,,,6,"H",247,247,247,
+,,,,7,"I",209,229,240,
+,,,,8,"J",146,197,222,
+,,,,9,"L",67,147,195,
+,,,,10,"N",33,102,172,
+,,,,11,"O",5,48,97,
+"RdGy",3,"div",2,1,"E",239,138,98,"Diverging"
+,,,,2,"H",255,255,255,
+,,,,3,"K",153,153,153,
+"RdGy",4,"div","2,5",1,"C",202,0,32,
+,,,,2,"F",244,165,130,
+,,,,3,"J",186,186,186,
+,,,,4,"M",64,64,64,
+"RdGy",5,"div",3,1,"C",202,0,32,
+,,,,2,"F",244,165,130,
+,,,,3,"H",255,255,255,
+,,,,4,"J",186,186,186,
+,,,,5,"M",64,64,64,
+"RdGy",6,"div","3,5",1,"B",178,24,43,
+,,,,2,"E",239,138,98,
+,,,,3,"G",253,219,199,
+,,,,4,"I",224,224,224,
+,,,,5,"K",153,153,153,
+,,,,6,"N",77,77,77,
+"RdGy",7,"div",4,1,"B",178,24,43,
+,,,,2,"E",239,138,98,
+,,,,3,"G",253,219,199,
+,,,,4,"H",255,255,255,
+,,,,5,"I",224,224,224,
+,,,,6,"K",153,153,153,
+,,,,7,"N",77,77,77,
+"RdGy",8,"div","4,5",1,"B",178,24,43,
+,,,,2,"D",214,96,77,
+,,,,3,"F",244,165,130,
+,,,,4,"G",253,219,199,
+,,,,5,"I",224,224,224,
+,,,,6,"J",186,186,186,
+,,,,7,"L",135,135,135,
+,,,,8,"N",77,77,77,
+"RdGy",9,"div",5,1,"B",178,24,43,
+,,,,2,"D",214,96,77,
+,,,,3,"F",244,165,130,
+,,,,4,"G",253,219,199,
+,,,,5,"H",255,255,255,
+,,,,6,"I",224,224,224,
+,,,,7,"J",186,186,186,
+,,,,8,"L",135,135,135,
+,,,,9,"N",77,77,77,
+"RdGy",10,"div","5,5",1,"A",103,0,31,
+,,,,2,"B",178,24,43,
+,,,,3,"D",214,96,77,
+,,,,4,"F",244,165,130,
+,,,,5,"G",253,219,199,
+,,,,6,"I",224,224,224,
+,,,,7,"J",186,186,186,
+,,,,8,"L",135,135,135,
+,,,,9,"N",77,77,77,
+,,,,10,"O",26,26,26,
+"RdGy",11,"div",6,1,"A",103,0,31,
+,,,,2,"B",178,24,43,
+,,,,3,"D",214,96,77,
+,,,,4,"F",244,165,130,
+,,,,5,"G",253,219,199,
+,,,,6,"H",255,255,255,
+,,,,7,"I",224,224,224,
+,,,,8,"J",186,186,186,
+,,,,9,"L",135,135,135,
+,,,,10,"N",77,77,77,
+,,,,11,"O",26,26,26,
+"RdPu",3,"seq",,1,"C",253,224,221,"Sequential"
+,,,,2,"F",250,159,181,
+,,,,3,"I",197,27,138,
+"RdPu",4,"seq",,1,"B",254,235,226,
+,,,,2,"E",251,180,185,
+,,,,3,"G",247,104,161,
+,,,,4,"J",174,1,126,
+"RdPu",5,"seq",,1,"B",254,235,226,
+,,,,2,"E",251,180,185,
+,,,,3,"G",247,104,161,
+,,,,4,"I",197,27,138,
+,,,,5,"K",122,1,119,
+"RdPu",6,"seq",,1,"B",254,235,226,
+,,,,2,"D",252,197,192,
+,,,,3,"F",250,159,181,
+,,,,4,"G",247,104,161,
+,,,,5,"I",197,27,138,
+,,,,6,"K",122,1,119,
+"RdPu",7,"seq",,1,"B",254,235,226,
+,,,,2,"D",252,197,192,
+,,,,3,"F",250,159,181,
+,,,,4,"G",247,104,161,
+,,,,5,"H",221,52,151,
+,,,,6,"J",174,1,126,
+,,,,7,"L",122,1,119,
+"RdPu",8,"seq",,1,"A",255,247,243,
+,,,,2,"C",253,224,221,
+,,,,3,"D",252,197,192,
+,,,,4,"F",250,159,181,
+,,,,5,"G",247,104,161,
+,,,,6,"H",221,52,151,
+,,,,7,"J",174,1,126,
+,,,,8,"L",122,1,119,
+"RdPu",9,"seq",,1,"A",255,247,243,
+,,,,2,"C",253,224,221,
+,,,,3,"D",252,197,192,
+,,,,4,"F",250,159,181,
+,,,,5,"G",247,104,161,
+,,,,6,"H",221,52,151,
+,,,,7,"J",174,1,126,
+,,,,8,"K",122,1,119,
+,,,,9,"M",73,0,106,
+"Reds",3,"seq",,1,"C",254,224,210,"Sequential"
+,,,,2,"F",252,146,114,
+,,,,3,"I",222,45,38,
+"Reds",4,"seq",,1,"B",254,229,217,
+,,,,2,"E",252,174,145,
+,,,,3,"G",251,106,74,
+,,,,4,"J",203,24,29,
+"Reds",5,"seq",,1,"B",254,229,217,
+,,,,2,"E",252,174,145,
+,,,,3,"G",251,106,74,
+,,,,4,"I",222,45,38,
+,,,,5,"K",165,15,21,
+"Reds",6,"seq",,1,"B",254,229,217,
+,,,,2,"D",252,187,161,
+,,,,3,"F",252,146,114,
+,,,,4,"G",251,106,74,
+,,,,5,"I",222,45,38,
+,,,,6,"K",165,15,21,
+"Reds",7,"seq",,1,"B",254,229,217,
+,,,,2,"D",252,187,161,
+,,,,3,"F",252,146,114,
+,,,,4,"G",251,106,74,
+,,,,5,"H",239,59,44,
+,,,,6,"J",203,24,29,
+,,,,7,"L",153,0,13,
+"Reds",8,"seq",,1,"A",255,245,240,
+,,,,2,"C",254,224,210,
+,,,,3,"D",252,187,161,
+,,,,4,"F",252,146,114,
+,,,,5,"G",251,106,74,
+,,,,6,"H",239,59,44,
+,,,,7,"J",203,24,29,
+,,,,8,"L",153,0,13,
+"Reds",9,"seq",,1,"A",255,245,240,
+,,,,2,"C",254,224,210,
+,,,,3,"D",252,187,161,
+,,,,4,"F",252,146,114,
+,,,,5,"G",251,106,74,
+,,,,6,"H",239,59,44,
+,,,,7,"J",203,24,29,
+,,,,8,"K",165,15,21,
+,,,,9,"M",103,0,13,
+"RdYlBu",3,"div",2,1,"E",252,141,89,"Diverging"
+,,,,2,"H",255,255,191,
+,,,,3,"K",145,191,219,
+"RdYlBu",4,"div","2,5",1,"C",215,25,28,
+,,,,2,"F",253,174,97,
+,,,,3,"J",171,217,233,
+,,,,4,"M",44,123,182,
+"RdYlBu",5,"div",3,1,"C",215,25,28,
+,,,,2,"F",253,174,97,
+,,,,3,"H",255,255,191,
+,,,,4,"J",171,217,233,
+,,,,5,"M",44,123,182,
+"RdYlBu",6,"div","3,5",1,"B",215,48,39,
+,,,,2,"E",252,141,89,
+,,,,3,"G",254,224,144,
+,,,,4,"I",224,243,248,
+,,,,5,"K",145,191,219,
+,,,,6,"N",69,117,180,
+"RdYlBu",7,"div",4,1,"B",215,48,39,
+,,,,2,"E",252,141,89,
+,,,,3,"G",254,224,144,
+,,,,4,"H",255,255,191,
+,,,,5,"I",224,243,248,
+,,,,6,"K",145,191,219,
+,,,,7,"N",69,117,180,
+"RdYlBu",8,"div","4,5",1,"B",215,48,39,
+,,,,2,"D",244,109,67,
+,,,,3,"F",253,174,97,
+,,,,4,"G",254,224,144,
+,,,,5,"I",224,243,248,
+,,,,6,"J",171,217,233,
+,,,,7,"L",116,173,209,
+,,,,8,"N",69,117,180,
+"RdYlBu",9,"div",5,1,"B",215,48,39,
+,,,,2,"D",244,109,67,
+,,,,3,"F",253,174,97,
+,,,,4,"G",254,224,144,
+,,,,5,"H",255,255,191,
+,,,,6,"I",224,243,248,
+,,,,7,"J",171,217,233,
+,,,,8,"L",116,173,209,
+,,,,9,"N",69,117,180,
+"RdYlBu",10,"div","5,5",1,"A",165,0,38,
+,,,,2,"B",215,48,39,
+,,,,3,"D",244,109,67,
+,,,,4,"F",253,174,97,
+,,,,5,"G",254,224,144,
+,,,,6,"I",224,243,248,
+,,,,7,"J",171,217,233,
+,,,,8,"L",116,173,209,
+,,,,9,"N",69,117,180,
+,,,,10,"O",49,54,149,
+"RdYlBu",11,"div",6,1,"A",165,0,38,
+,,,,2,"B",215,48,39,
+,,,,3,"D",244,109,67,
+,,,,4,"F",253,174,97,
+,,,,5,"G",254,224,144,
+,,,,6,"H",255,255,191,
+,,,,7,"I",224,243,248,
+,,,,8,"J",171,217,233,
+,,,,9,"L",116,173,209,
+,,,,10,"N",69,117,180,
+,,,,11,"O",49,54,149,
+"RdYlGn",3,"div",2,1,"E",252,141,89,"Diverging"
+,,,,2,"H",255,255,191,
+,,,,3,"K",145,207,96,
+"RdYlGn",4,"div","2,5",1,"C",215,25,28,
+,,,,2,"F",253,174,97,
+,,,,3,"J",166,217,106,
+,,,,4,"M",26,150,65,
+"RdYlGn",5,"div",3,1,"C",215,25,28,
+,,,,2,"F",253,174,97,
+,,,,3,"H",255,255,191,
+,,,,4,"J",166,217,106,
+,,,,5,"M",26,150,65,
+"RdYlGn",6,"div","3,5",1,"B",215,48,39,
+,,,,2,"E",252,141,89,
+,,,,3,"G",254,224,139,
+,,,,4,"I",217,239,139,
+,,,,5,"K",145,207,96,
+,,,,6,"N",26,152,80,
+"RdYlGn",7,"div",4,1,"B",215,48,39,
+,,,,2,"E",252,141,89,
+,,,,3,"G",254,224,139,
+,,,,4,"H",255,255,191,
+,,,,5,"I",217,239,139,
+,,,,6,"K",145,207,96,
+,,,,7,"N",26,152,80,
+"RdYlGn",8,"div","4,5",1,"B",215,48,39,
+,,,,2,"D",244,109,67,
+,,,,3,"F",253,174,97,
+,,,,4,"G",254,224,139,
+,,,,5,"I",217,239,139,
+,,,,6,"J",166,217,106,
+,,,,7,"L",102,189,99,
+,,,,8,"N",26,152,80,
+"RdYlGn",9,"div",5,1,"B",215,48,39,
+,,,,2,"D",244,109,67,
+,,,,3,"F",253,174,97,
+,,,,4,"G",254,224,139,
+,,,,5,"H",255,255,191,
+,,,,6,"I",217,239,139,
+,,,,7,"J",166,217,106,
+,,,,8,"L",102,189,99,
+,,,,9,"N",26,152,80,
+"RdYlGn",10,"div","5,5",1,"A",165,0,38,
+,,,,2,"B",215,48,39,
+,,,,3,"D",244,109,67,
+,,,,4,"F",253,174,97,
+,,,,5,"G",254,224,139,
+,,,,6,"I",217,239,139,
+,,,,7,"J",166,217,106,
+,,,,8,"L",102,189,99,
+,,,,9,"N",26,152,80,
+,,,,10,"O",0,104,55,
+"RdYlGn",11,"div",6,1,"A",165,0,38,
+,,,,2,"B",215,48,39,
+,,,,3,"D",244,109,67,
+,,,,4,"F",253,174,97,
+,,,,5,"G",254,224,139,
+,,,,6,"H",255,255,191,
+,,,,7,"I",217,239,139,
+,,,,8,"J",166,217,106,
+,,,,9,"L",102,189,99,
+,,,,10,"N",26,152,80,
+,,,,11,"O",0,104,55,
+"Set1",3,"qual",,1,"A",228,26,28,"Qualitative"
+,,,,2,"B",55,126,184,
+,,,,3,"C",77,175,74,
+"Set1",4,"qual",,1,"A",228,26,28,
+,,,,2,"B",55,126,184,
+,,,,3,"C",77,175,74,
+,,,,4,"D",152,78,163,
+"Set1",5,"qual",,1,"A",228,26,28,
+,,,,2,"B",55,126,184,
+,,,,3,"C",77,175,74,
+,,,,4,"D",152,78,163,
+,,,,5,"E",255,127,0,
+"Set1",6,"qual",,1,"A",228,26,28,
+,,,,2,"B",55,126,184,
+,,,,3,"C",77,175,74,
+,,,,4,"D",152,78,163,
+,,,,5,"E",255,127,0,
+,,,,6,"F",255,255,51,
+"Set1",7,"qual",,1,"A",228,26,28,
+,,,,2,"B",55,126,184,
+,,,,3,"C",77,175,74,
+,,,,4,"D",152,78,163,
+,,,,5,"E",255,127,0,
+,,,,6,"F",255,255,51,
+,,,,7,"G",166,86,40,
+"Set1",8,"qual",,1,"A",228,26,28,
+,,,,2,"B",55,126,184,
+,,,,3,"C",77,175,74,
+,,,,4,"D",152,78,163,
+,,,,5,"E",255,127,0,
+,,,,6,"F",255,255,51,
+,,,,7,"G",166,86,40,
+,,,,8,"H",247,129,191,
+"Set1",9,"qual",,1,"A",228,26,28,
+,,,,2,"B",55,126,184,
+,,,,3,"C",77,175,74,
+,,,,4,"D",152,78,163,
+,,,,5,"E",255,127,0,
+,,,,6,"F",255,255,51,
+,,,,7,"G",166,86,40,
+,,,,8,"H",247,129,191,
+,,,,9,"I",153,153,153,
+"Set2",3,"qual",,1,"A",102,194,165,"Qualitative"
+,,,,2,"B",252,141,98,
+,,,,3,"C",141,160,203,
+"Set2",4,"qual",,1,"A",102,194,165,
+,,,,2,"B",252,141,98,
+,,,,3,"C",141,160,203,
+,,,,4,"D",231,138,195,
+"Set2",5,"qual",,1,"A",102,194,165,
+,,,,2,"B",252,141,98,
+,,,,3,"C",141,160,203,
+,,,,4,"D",231,138,195,
+,,,,5,"E",166,216,84,
+"Set2",6,"qual",,1,"A",102,194,165,
+,,,,2,"B",252,141,98,
+,,,,3,"C",141,160,203,
+,,,,4,"D",231,138,195,
+,,,,5,"E",166,216,84,
+,,,,6,"F",255,217,47,
+"Set2",7,"qual",,1,"A",102,194,165,
+,,,,2,"B",252,141,98,
+,,,,3,"C",141,160,203,
+,,,,4,"D",231,138,195,
+,,,,5,"E",166,216,84,
+,,,,6,"F",255,217,47,
+,,,,7,"G",229,196,148,
+"Set2",8,"qual",,1,"A",102,194,165,
+,,,,2,"B",252,141,98,
+,,,,3,"C",141,160,203,
+,,,,4,"D",231,138,195,
+,,,,5,"E",166,216,84,
+,,,,6,"F",255,217,47,
+,,,,7,"G",229,196,148,
+,,,,8,"H",179,179,179,
+"Set3",3,"qual",,1,"A",141,211,199,"Qualitative"
+,,,,2,"B",255,255,179,
+,,,,3,"C",190,186,218,
+"Set3",4,"qual",,1,"A",141,211,199,
+,,,,2,"B",255,255,179,
+,,,,3,"C",190,186,218,
+,,,,4,"D",251,128,114,
+"Set3",5,"qual",,1,"A",141,211,199,
+,,,,2,"B",255,255,179,
+,,,,3,"C",190,186,218,
+,,,,4,"D",251,128,114,
+,,,,5,"E",128,177,211,
+"Set3",6,"qual",,1,"A",141,211,199,
+,,,,2,"B",255,255,179,
+,,,,3,"C",190,186,218,
+,,,,4,"D",251,128,114,
+,,,,5,"E",128,177,211,
+,,,,6,"F",253,180,98,
+"Set3",7,"qual",,1,"A",141,211,199,
+,,,,2,"B",255,255,179,
+,,,,3,"C",190,186,218,
+,,,,4,"D",251,128,114,
+,,,,5,"E",128,177,211,
+,,,,6,"F",253,180,98,
+,,,,7,"G",179,222,105,
+"Set3",8,"qual",,1,"A",141,211,199,
+,,,,2,"B",255,255,179,
+,,,,3,"C",190,186,218,
+,,,,4,"D",251,128,114,
+,,,,5,"E",128,177,211,
+,,,,6,"F",253,180,98,
+,,,,7,"G",179,222,105,
+,,,,8,"H",252,205,229,
+"Set3",9,"qual",,1,"A",141,211,199,
+,,,,2,"B",255,255,179,
+,,,,3,"C",190,186,218,
+,,,,4,"D",251,128,114,
+,,,,5,"E",128,177,211,
+,,,,6,"F",253,180,98,
+,,,,7,"G",179,222,105,
+,,,,8,"H",252,205,229,
+,,,,9,"I",217,217,217,
+"Set3",10,"qual",,1,"A",141,211,199,
+,,,,2,"B",255,255,179,
+,,,,3,"C",190,186,218,
+,,,,4,"D",251,128,114,
+,,,,5,"E",128,177,211,
+,,,,6,"F",253,180,98,
+,,,,7,"G",179,222,105,
+,,,,8,"H",252,205,229,
+,,,,9,"I",217,217,217,
+,,,,10,"J",188,128,189,
+"Set3",11,"qual",,1,"A",141,211,199,
+,,,,2,"B",255,255,179,
+,,,,3,"C",190,186,218,
+,,,,4,"D",251,128,114,
+,,,,5,"E",128,177,211,
+,,,,6,"F",253,180,98,
+,,,,7,"G",179,222,105,
+,,,,8,"H",252,205,229,
+,,,,9,"I",217,217,217,
+,,,,10,"J",188,128,189,
+,,,,11,"K",204,235,197,
+"Set3",12,"qual",,1,"A",141,211,199,
+,,,,2,"B",255,255,179,
+,,,,3,"C",190,186,218,
+,,,,4,"D",251,128,114,
+,,,,5,"E",128,177,211,
+,,,,6,"F",253,180,98,
+,,,,7,"G",179,222,105,
+,,,,8,"H",252,205,229,
+,,,,9,"I",217,217,217,
+,,,,10,"J",188,128,189,
+,,,,11,"K",204,235,197,
+,,,,12,"L",255,237,111,
+"Spectral",3,"div",2,1,"E",252,141,89,"Diverging"
+,,,,2,"H",255,255,191,
+,,,,3,"K",153,213,148,
+"Spectral",4,"div","2,5",1,"C",215,25,28,
+,,,,2,"F",253,174,97,
+,,,,3,"J",171,221,164,
+,,,,4,"M",43,131,186,
+"Spectral",5,"div",3,1,"C",215,25,28,
+,,,,2,"F",253,174,97,
+,,,,3,"H",255,255,191,
+,,,,4,"J",171,221,164,
+,,,,5,"M",43,131,186,
+"Spectral",6,"div","3,5",1,"B",213,62,79,
+,,,,2,"E",252,141,89,
+,,,,3,"G",254,224,139,
+,,,,4,"I",230,245,152,
+,,,,5,"K",153,213,148,
+,,,,6,"N",50,136,189,
+"Spectral",7,"div",4,1,"B",213,62,79,
+,,,,2,"E",252,141,89,
+,,,,3,"G",254,224,139,
+,,,,4,"H",255,255,191,
+,,,,5,"I",230,245,152,
+,,,,6,"K",153,213,148,
+,,,,7,"N",50,136,189,
+"Spectral",8,"div","4,5",1,"B",213,62,79,
+,,,,2,"D",244,109,67,
+,,,,3,"F",253,174,97,
+,,,,4,"G",254,224,139,
+,,,,5,"I",230,245,152,
+,,,,6,"J",171,221,164,
+,,,,7,"L",102,194,165,
+,,,,8,"N",50,136,189,
+"Spectral",9,"div",5,1,"B",213,62,79,
+,,,,2,"D",244,109,67,
+,,,,3,"F",253,174,97,
+,,,,4,"G",254,224,139,
+,,,,5,"H",255,255,191,
+,,,,6,"I",230,245,152,
+,,,,7,"J",171,221,164,
+,,,,8,"L",102,194,165,
+,,,,9,"N",50,136,189,
+"Spectral",10,"div","5,5",1,"A",158,1,66,
+,,,,2,"B",213,62,79,
+,,,,3,"D",244,109,67,
+,,,,4,"F",253,174,97,
+,,,,5,"G",254,224,139,
+,,,,6,"I",230,245,152,
+,,,,7,"J",171,221,164,
+,,,,8,"L",102,194,165,
+,,,,9,"N",50,136,189,
+,,,,10,"O",94,79,162,
+"Spectral",11,"div",6,1,"A",158,1,66,
+,,,,2,"B",213,62,79,
+,,,,3,"D",244,109,67,
+,,,,4,"F",253,174,97,
+,,,,5,"G",254,224,139,
+,,,,6,"H",255,255,191,
+,,,,7,"I",230,245,152,
+,,,,8,"J",171,221,164,
+,,,,9,"L",102,194,165,
+,,,,10,"N",50,136,189,
+,,,,11,"O",94,79,162,
+"YlGn",3,"seq",,1,"C",247,252,185,"Sequential"
+,,,,2,"F",173,221,142,
+,,,,3,"I",49,163,84,
+"YlGn",4,"seq",,1,"B",255,255,204,
+,,,,2,"E",194,230,153,
+,,,,3,"G",120,198,121,
+,,,,4,"J",35,132,67,
+"YlGn",5,"seq",,1,"B",255,255,204,
+,,,,2,"E",194,230,153,
+,,,,3,"G",120,198,121,
+,,,,4,"I",49,163,84,
+,,,,5,"K",0,104,55,
+"YlGn",6,"seq",,1,"B",255,255,204,
+,,,,2,"D",217,240,163,
+,,,,3,"F",173,221,142,
+,,,,4,"G",120,198,121,
+,,,,5,"I",49,163,84,
+,,,,6,"K",0,104,55,
+"YlGn",7,"seq",,1,"B",255,255,204,
+,,,,2,"D",217,240,163,
+,,,,3,"F",173,221,142,
+,,,,4,"G",120,198,121,
+,,,,5,"H",65,171,93,
+,,,,6,"J",35,132,67,
+,,,,7,"L",0,90,50,
+"YlGn",8,"seq",,1,"A",255,255,229,
+,,,,2,"C",247,252,185,
+,,,,3,"D",217,240,163,
+,,,,4,"F",173,221,142,
+,,,,5,"G",120,198,121,
+,,,,6,"H",65,171,93,
+,,,,7,"J",35,132,67,
+,,,,8,"L",0,90,50,
+"YlGn",9,"seq",,1,"A",255,255,229,
+,,,,2,"C",247,252,185,
+,,,,3,"D",217,240,163,
+,,,,4,"F",173,221,142,
+,,,,5,"G",120,198,121,
+,,,,6,"H",65,171,93,
+,,,,7,"J",35,132,67,
+,,,,8,"K",0,104,55,
+,,,,9,"M",0,69,41,
+"YlGnBu",3,"seq",,1,"C",237,248,177,"Sequential"
+,,,,2,"F",127,205,187,
+,,,,3,"I",44,127,184,
+"YlGnBu",4,"seq",,1,"B",255,255,204,
+,,,,2,"E",161,218,180,
+,,,,3,"G",65,182,196,
+,,,,4,"J",34,94,168,
+"YlGnBu",5,"seq",,1,"B",255,255,204,
+,,,,2,"E",161,218,180,
+,,,,3,"G",65,182,196,
+,,,,4,"I",44,127,184,
+,,,,5,"K",37,52,148,
+"YlGnBu",6,"seq",,1,"B",255,255,204,
+,,,,2,"D",199,233,180,
+,,,,3,"F",127,205,187,
+,,,,4,"G",65,182,196,
+,,,,5,"I",44,127,184,
+,,,,6,"K",37,52,148,
+"YlGnBu",7,"seq",,1,"B",255,255,204,
+,,,,2,"D",199,233,180,
+,,,,3,"F",127,205,187,
+,,,,4,"G",65,182,196,
+,,,,5,"H",29,145,192,
+,,,,6,"J",34,94,168,
+,,,,7,"L",12,44,132,
+"YlGnBu",8,"seq",,1,"A",255,255,217,
+,,,,2,"C",237,248,177,
+,,,,3,"D",199,233,180,
+,,,,4,"F",127,205,187,
+,,,,5,"G",65,182,196,
+,,,,6,"H",29,145,192,
+,,,,7,"J",34,94,168,
+,,,,8,"L",12,44,132,
+"YlGnBu",9,"seq",,1,"A",255,255,217,
+,,,,2,"C",237,248,177,
+,,,,3,"D",199,233,180,
+,,,,4,"F",127,205,187,
+,,,,5,"G",65,182,196,
+,,,,6,"H",29,145,192,
+,,,,7,"J",34,94,168,
+,,,,8,"K",37,52,148,
+,,,,9,"M",8,29,88,
+"YlOrBr",3,"seq",,1,"C",255,247,188,"Sequential"
+,,,,2,"F",254,196,79,
+,,,,3,"I",217,95,14,
+"YlOrBr",4,"seq",,1,"B",255,255,212,
+,,,,2,"E",254,217,142,
+,,,,3,"G",254,153,41,
+,,,,4,"J",204,76,2,
+"YlOrBr",5,"seq",,1,"B",255,255,212,
+,,,,2,"E",254,217,142,
+,,,,3,"G",254,153,41,
+,,,,4,"I",217,95,14,
+,,,,5,"K",153,52,4,
+"YlOrBr",6,"seq",,1,"B",255,255,212,
+,,,,2,"D",254,227,145,
+,,,,3,"F",254,196,79,
+,,,,4,"G",254,153,41,
+,,,,5,"I",217,95,14,
+,,,,6,"K",153,52,4,
+"YlOrBr",7,"seq",,1,"B",255,255,212,
+,,,,2,"D",254,227,145,
+,,,,3,"F",254,196,79,
+,,,,4,"G",254,153,41,
+,,,,5,"H",236,112,20,
+,,,,6,"J",204,76,2,
+,,,,7,"L",140,45,4,
+"YlOrBr",8,"seq",,1,"A",255,255,229,
+,,,,2,"C",255,247,188,
+,,,,3,"D",254,227,145,
+,,,,4,"F",254,196,79,
+,,,,5,"G",254,153,41,
+,,,,6,"H",236,112,20,
+,,,,7,"J",204,76,2,
+,,,,8,"L",140,45,4,
+"YlOrBr",9,"seq",,1,"A",255,255,229,
+,,,,2,"C",255,247,188,
+,,,,3,"D",254,227,145,
+,,,,4,"F",254,196,79,
+,,,,5,"G",254,153,41,
+,,,,6,"H",236,112,20,
+,,,,7,"J",204,76,2,
+,,,,8,"K",153,52,4,
+,,,,9,"M",102,37,6,
+"YlOrRd",3,"seq",,1,"C",255,237,160,"Sequential"
+,,,,2,"F",254,178,76,
+,,,,3,"I",240,59,32,
+"YlOrRd",4,"seq",,1,"B",255,255,178,
+,,,,2,"E",254,204,92,
+,,,,3,"G",253,141,60,
+,,,,4,"J",227,26,28,
+"YlOrRd",5,"seq",,1,"B",255,255,178,
+,,,,2,"E",254,204,92,
+,,,,3,"G",253,141,60,
+,,,,4,"I",240,59,32,
+,,,,5,"K",189,0,38,
+"YlOrRd",6,"seq",,1,"B",255,255,178,
+,,,,2,"D",254,217,118,
+,,,,3,"F",254,178,76,
+,,,,4,"G",253,141,60,
+,,,,5,"I",240,59,32,
+,,,,6,"K",189,0,38,
+"YlOrRd",7,"seq",,1,"B",255,255,178,
+,,,,2,"D",254,217,118,
+,,,,3,"F",254,178,76,
+,,,,4,"G",253,141,60,
+,,,,5,"H",252,78,42,
+,,,,6,"J",227,26,28,
+,,,,7,"L",177,0,38,
+"YlOrRd",8,"seq",,1,"A",255,255,204,
+,,,,2,"C",255,237,160,
+,,,,3,"D",254,217,118,
+,,,,4,"F",254,178,76,
+,,,,5,"G",253,141,60,
+,,,,6,"H",252,78,42,
+,,,,7,"J",227,26,28,
+,,,,8,"L",177,0,38,
+"YlOrRd",9,"seq",,1,"A",255,255,204,
+,,,,2,"C",255,237,160,
+,,,,3,"D",254,217,118,
+,,,,4,"F",254,178,76,
+,,,,5,"G",253,141,60,
+,,,,6,"H",252,78,42,
+,,,,7,"J",227,26,28,
+,,,,8,"K",189,0,38,
+,,,,9,"M",128,0,38,
+,,,,,,,,,
+"Apache-Style Software License for ColorBrewer software and ColorBrewer Color Schemes",,,,,,,,,
+,,,,,,,,,
+"Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State University.",,,,,,,,,
+,,,,,,,,,
+"Licensed under the Apache License, Version 2.0 (the ""License""); you may not use this file except in compliance with the License.",,,,,,,,,
+"You may obtain a copy of the License at",,,,,,,,,
+,,,,,,,,,
+"       http://www.apache.org/licenses/LICENSE-2.0",,,,,,,,,
+,,,,,,,,,
+"Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an ""AS IS"" BASIS,",,,,,,,,,
+"WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.",,,,,,,,,
+"See the License for the specific language governing permissions and limitations under the License.",,,,,,,,,
+,,,,,,,,,
+,,,,,,,,,
+"Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:",,,,,,,,,
+"1. Redistributions as source code must retain the above copyright notice, this list of conditions and the following disclaimer.",,,,,,,,,
+"2. The end-user documentation included with the redistribution, if any, must include the following acknowledgment:",,,,,,,,,
+"This product includes color specifications and designs developed by Cynthia Brewer (http://colorbrewer.org/).",,,,,,,,,
+"Alternately, this acknowledgment may appear in the software itself, if and wherever such third-party acknowledgments normally appear.",,,,,,,,,
+"4. The name ""ColorBrewer"" must not be used to endorse or promote products derived from this software without prior written permission. ",,,,,,,,,
+"For written permission, please contact Cynthia Brewer at cbrewer at psu.edu.",,,,,,,,,
+"5. Products derived from this software may not be called ""ColorBrewer"", nor may ""ColorBrewer"" appear in their name, without prior written permission of Cynthia Brewer.",,,,,,,,,

Copied: sandbox/maestro-3.0/Maestro.Editors/Resources/CommandTypesDataset.xml (from rev 5035, trunk/Tools/Maestro/Maestro/ResourceEditors/Resources/CommandTypesDataset.xml)
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Resources/CommandTypesDataset.xml	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/Resources/CommandTypesDataset.xml	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8" ?>
+
+<!-- 
+  Note to translators:
+    You can only translate <Label>, <ToolTip> and <Description>
+    If you translate any of the others, the editor won't work!
+-->
+
+<CommandTypesDataset>
+	<Command>
+		<Command>About</Command>
+		<Label>About</Label>
+		<ToolTip>About</ToolTip>
+		<Action>About</Action>
+		<Description>Display information about this application</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon></EnabledIcon>		
+		<DisabledIcon></DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Buffer</Command>
+		<Label>Buffer</Label>
+		<ToolTip>Buffer</ToolTip>
+		<Action>Buffer</Action>
+		<Description>Create buffers around the selected features</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_buffer.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_buffer_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Clear Selection</Command>
+		<Label>Clear Selection</Label>
+		<ToolTip>Clear selection</ToolTip>
+		<Action>Clear Selection</Action>
+		<Description>Clear the current selections</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_clearselect.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_clearselect_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Copy Map</Command>
+		<Label>Copy</Label>
+		<ToolTip>Copy</ToolTip>
+		<Action>Copy Map</Action>
+		<Description>Copy current view of map to clipboard</Description>
+		<Viewers>DWF</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_copy.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_copy_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Help</Command>
+		<Label>Help</Label>
+		<ToolTip>Help</ToolTip>
+		<Action>Help</Action>
+		<Description>Launch help for this application</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_help.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_help_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Initial Center and Scale</Command>
+		<Label>Initial Center and Scale</Label>
+		<ToolTip>Initial center and scale</ToolTip>
+		<Action>Restore View</Action>
+		<Description>Zoom to the initial center and scale of the map</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_restorecenter.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_restorecenter_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Initial Map View</Command>
+		<Label>Initial Map View</Label>
+		<ToolTip>Initial map view</ToolTip>
+		<Action>Fit To Window</Action>
+		<Description>Fit the initial view of the map to the window</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_fitwindow.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_fitwindow_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Invoke Script</Command>
+		<Label>Invoke Script</Label>
+		<ToolTip>Invoke script</ToolTip>
+		<Action>Invoke Script</Action>
+		<Description>Invoke a script command</Description>
+		<Viewers>All</Viewers>
+		<Type>Custom</Type>
+		<EnabledIcon>../stdicons/icon_invokescript.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_invokescript_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Invoke URL</Command>
+		<Label>Invoke URL</Label>
+		<ToolTip>Invoke a command by accessing a URL</ToolTip>
+		<Action>Invoke URL</Action>
+		<Description>Invoke a URL command</Description>
+		<Viewers>All</Viewers>
+		<Type>Custom</Type>
+		<EnabledIcon>../stdicons/icon_invokeurl.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_invokeurl_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Measure</Command>
+		<Label>Measure</Label>
+		<ToolTip>Measure</ToolTip>
+		<Action>Measure</Action>
+		<Description>Measure distances on the map</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_measure.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_measure_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Next View</Command>
+		<Label>Next View</Label>
+		<ToolTip>Next View</ToolTip>
+		<Action>Next View</Action>
+		<Description>Buffer</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_zoomnext.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_zoomnext_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Pan</Command>
+		<Label>Pan</Label>
+		<ToolTip>Pan mode</ToolTip>
+		<Action>Pan</Action>
+		<Description>Drag the map to view areas out of range</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_pan.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_pan_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Pan Down</Command>
+		<Label>Pan Down</Label>
+		<ToolTip>Pan down</ToolTip>
+		<Action>Pan Down</Action>
+		<Description>Pan down by a preset increment</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_pandown.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_pandown_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Pan Left</Command>
+		<Label>Pan Left</Label>
+		<ToolTip>Pan left</ToolTip>
+		<Action>Pan Left</Action>
+		<Description>Pan left by a preset increment</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_panleft.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_panleft_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Pan Right</Command>
+		<Label>Pan Right</Label>
+		<ToolTip>Pan right</ToolTip>
+		<Action>Pan Right</Action>
+		<Description>Pan right by a preset increment</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_panright.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_panright_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Pan Up</Command>
+		<Label>Pan Up</Label>
+		<ToolTip>Pan up</ToolTip>
+		<Action>Pan Up</Action>
+		<Description>Pan up by a preset increment</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_panup.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_panup_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Previous View</Command>
+		<Label>Previous View</Label>
+		<ToolTip>Previous view</ToolTip>
+		<Action>Previous View</Action>
+		<Description>Go to previous view</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_zoomprev.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_zoomprev_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Print</Command>
+		<Label>Print</Label>
+		<ToolTip>Print</ToolTip>
+		<Action>Print</Action>
+		<Description>Print with optional layout</Description>
+		<Viewers>DWF</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_print.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_print_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Refresh Map</Command>
+		<Label>Refresh Map</Label>
+		<ToolTip>Refresh map</ToolTip>
+		<Action>Refresh</Action>
+		<Description>Refresh map and reload all layers keeping current center and scale</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_refreshmap.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_refreshmap_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Search</Command>
+		<Label>Search</Label>
+		<ToolTip>Search</ToolTip>
+		<Action>Search</Action>
+		<Description>Perform a search</Description>
+		<Viewers>All</Viewers>
+		<Type>Custom</Type>
+		<EnabledIcon>../stdicons/icon_search.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_search_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Select</Command>
+		<Label>Select</Label>
+		<ToolTip>Select mode</ToolTip>
+		<Action>Select</Action>
+		<Description>Select features by clicking and dragging</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_select.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_select_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Select Polygon</Command>
+		<Label>Select Polygon</Label>
+		<ToolTip>Select polygon</ToolTip>
+		<Action>Select Polygon</Action>
+		<Description>Create a polygon to select all features that fall within</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_selectpolygon.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_selectpolygon_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Select Radius</Command>
+		<Label>Select Radius</Label>
+		<ToolTip>Select radius</ToolTip>
+		<Action>Select Radius</Action>
+		<Description>Click and drag to select all features inside the circle</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_selectradius.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_selectradius_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Select Within</Command>
+		<Label>Select Within</Label>
+		<ToolTip>Select within</ToolTip>
+		<Action>Select Within</Action>
+		<Description>Select features that fall within currently selected areas</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_selectwithin.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_selectwithin_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>View Options</Command>
+		<Label>View Options</Label>
+		<ToolTip>View options</ToolTip>
+		<Action>View Options</Action>
+		<Description>View Options</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_viewoptions.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_viewoptions_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Zoom</Command>
+		<Label>Zoom Dynamic</Label>
+		<ToolTip>Zoom dynamic</ToolTip>
+		<Action>Zoom</Action>
+		<Description>Zoom dynamically by clicking and dragging</Description>
+		<Viewers>DWF</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_zoom.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_zoom_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Zoom In</Command>
+		<Label>Zoom In</Label>
+		<ToolTip>Zoom in</ToolTip>
+		<Action>Zoom In</Action>
+		<Description>Zoom in by a preset increment</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_zoomin.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_zoomin_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Zoom Out</Command>
+		<Label>Zoom Out</Label>
+		<ToolTip>Zoom out</ToolTip>
+		<Action>Zoom Out</Action>
+		<Description>Zoom out by a preset increment</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_zoomout.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_zoomout_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Zoom Rectangle</Command>
+		<Label>Zoom Rectangle</Label>
+		<ToolTip>Zoom to rectangle</ToolTip>
+		<Action>Zoom Rectangle</Action>
+		<Description>Zoom in on an area</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_zoomrect.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_zoomrect_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Zoom Selection</Command>
+		<Label>Zoom Selection</Label>
+		<ToolTip>Zoom to selection</ToolTip>
+		<Action>Zoom To Selection</Action>
+		<Description>Zoom to extents of selected features</Description>
+		<Viewers>All</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_zoomselect.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_zoomselect_disabled.gif</DisabledIcon>
+	</Command>
+
+	<Command>
+		<Command>Get Printable Page</Command>
+		<Label>Printable Page</Label>
+		<ToolTip>Get printable page</ToolTip>
+		<Action>Get Printable Page</Action>
+		<Description>Get printer-friendly page</Description>
+		<Viewers>AJAX</Viewers>
+		<Type>Built-In</Type>
+		<EnabledIcon>../stdicons/icon_printablepage.gif</EnabledIcon>		
+		<DisabledIcon>../stdicons/icon_printablepage_disabled.gif</DisabledIcon>
+	</Command>
+
+</CommandTypesDataset>

Copied: sandbox/maestro-3.0/Maestro.Editors/Resources/GeometryStyleComboDataset.xml (from rev 5035, trunk/Tools/Maestro/Maestro/ResourceEditors/Resources/GeometryStyleComboDataset.xml)
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Resources/GeometryStyleComboDataset.xml	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/Resources/GeometryStyleComboDataset.xml	2010-07-23 12:38:06 UTC (rev 5050)
@@ -0,0 +1,146 @@
+<?xml version="1.0" standalone="yes"?>
+<ComboBoxDataSet>
+	<SymbolMark>
+		<Display>Square</Display>
+		<Value>Square</Value>
+	</SymbolMark>
+	<SymbolMark>
+		<Display>Circle</Display>
+		<Value>Circle</Value>
+	</SymbolMark>
+	<SymbolMark>
+		<Display>Triangle</Display>
+		<Value>Triangle</Value>
+	</SymbolMark>
+	<SymbolMark>
+		<Display>Star</Display>
+		<Value>Star</Value>
+	</SymbolMark>
+	<SymbolMark>
+		<Display>Cross</Display>
+		<Value>Cross</Value>
+	</SymbolMark>
+	<SymbolMark>
+		<Display>X - Mark</Display>
+		<Value>X</Value>
+	</SymbolMark>
+	<SymbolMark>
+		<Display>Font...</Display>
+		<Value></Value>
+	</SymbolMark>
+	<SymbolMark>
+		<Display>Symbol...</Display>
+		<Value></Value>
+	</SymbolMark>
+	
+	<SizeContext>
+		<Display>Device space</Display>
+		<Value>DeviceUnits</Value>
+	</SizeContext>
+	<SizeContext>
+		<Display>Map space</Display>
+		<Value>MappingUnits</Value>
+	</SizeContext>
+	
+	<Units>
+		<Display>Points</Display>
+		<Value>Points</Value>
+	</Units>
+	<Units>
+		<Display>Inches</Display>
+		<Value>Inches</Value>
+	</Units>
+	<Units>
+		<Display>Feet</Display>
+		<Value>Feet</Value>
+	</Units>
+	<Units>
+		<Display>Yards</Display>
+		<Value>Yards</Value>
+	</Units>
+	<Units>
+		<Display>Millimeters</Display>
+		<Value>Millimeters</Value>
+	</Units>
+	<Units>
+		<Display>Centimeters</Display>
+		<Value>Centimeters</Value>
+	</Units>
+	<Units>
+		<Display>Meters</Display>
+		<Value>Meters</Value>
+	</Units>
+	<Units>
+		<Display>Kilometers</Display>
+		<Value>Kilometers</Value>
+	</Units>
+
+	<Rotation>
+		<Display>0 degrees</Display>
+		<Value>0</Value>
+	</Rotation>
+	<Rotation>
+		<Display>30 degrees</Display>
+		<Value>30</Value>
+	</Rotation>
+	<Rotation>
+		<Display>45 degrees</Display>
+		<Value>45</Value>
+	</Rotation>
+	<Rotation>
+		<Display>90 degrees</Display>
+		<Value>90</Value>
+	</Rotation>
+  <Rotation>
+    <Display>Expression...</Display>
+    <Value>Expression...</Value>
+  </Rotation>
+
+  <BackgroundType>
+    <Display>Ghosted</Display>
+    <Value>Ghosted</Value>
+  </BackgroundType>
+  <BackgroundType>
+    <Display>Opaque</Display>
+    <Value>Opaque</Value>
+  </BackgroundType>
+  <BackgroundType>
+    <Display>Transparent</Display>
+    <Value>Transparent</Value>
+  </BackgroundType>
+
+  <Vertical>
+    <Display>Baseline</Display>
+    <Value>'Baseline'</Value>
+  </Vertical>
+  <Vertical>
+    <Display>Bottom</Display>
+    <Value>'Bottom'</Value>
+  </Vertical>
+  <Vertical>
+    <Display>Capline</Display>
+    <Value>'Capline'</Value>
+  </Vertical>
+  <Vertical>
+    <Display>Halfline</Display>
+    <Value>'Halfline'</Value>
+  </Vertical>
+  <Vertical>
+    <Display>Top</Display>
+    <Value>'Top'</Value>
+  </Vertical>
+  <Vertical>
+    <Display>Expression...</Display>
+    <Value>Expression...</Value>
+  </Vertical>
+
+  <Horizontal>
+    <Display>Center</Display>
+    <Value>'Center'</Value>
+  </Horizontal>
+  <Horizontal>
+    <Display>Expression...</Display>
+    <Value>Expression...</Value>
+  </Horizontal>
+
+</ComboBoxDataSet>
\ No newline at end of file

Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSource.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSource.cs	2010-07-23 01:43:33 UTC (rev 5049)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSource.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -310,5 +310,15 @@
         {
             return this.CurrentConnection.FeatureService.GetSpatialExtent(this.ResourceID, className, geomProperty);
         }
+
+        /// <summary>
+        /// Convenience method to get the feature class definition
+        /// </summary>
+        /// <param name="qualifiedName"></param>
+        /// <returns></returns>
+        public FeatureSourceDescription.FeatureSourceSchema GetClass(string qualifiedName)
+        {
+            return this.CurrentConnection.FeatureService.GetFeatureSourceSchema(this.ResourceID, qualifiedName);
+        }
     }
 }

Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerDefinition.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerDefinition.cs	2010-07-23 01:43:33 UTC (rev 5049)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerDefinition.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -62,6 +62,22 @@
         string Filter { get; set; }
     }
 
+    public static class LayerExtensionMethods
+    {
+        /// <summary>
+        /// Gets the referenced schema of this vector layer
+        /// </summary>
+        /// <param name="vl"></param>
+        /// <returns></returns>
+        public static string GetSchema(this IVectorLayerDefinition vl)
+        {
+            if (string.IsNullOrEmpty(vl.FullQualifiedClassName) || !vl.FullQualifiedClassName.Contains(":"))
+                return string.Empty;
+            else
+                return vl.FullQualifiedClassName.Split(':')[0];
+        }
+    }
+
     public interface IRasterLayerDefinition : ISubLayerDefinition
     {
         string FeatureSourceID { get; set; }
@@ -72,6 +88,13 @@
         string DrawingSourceID { get; set; }
     }
 
+    public interface ILayerRule
+    {
+        string Filter { get; set; }
+
+        string LegendLabel { get; set; }
+    }
+
     abstract partial class BaseLayerDefinitionType : ISubLayerDefinition
     {
         [XmlIgnore]
@@ -181,11 +204,98 @@
             }
         }
         #endregion
+
+        [XmlIgnore]
+        public AreaTypeStyleType AreaStyle
+        {
+            get
+            {
+                foreach (var item in this.itemsField)
+                {
+                    if (typeof(AreaTypeStyleType).IsAssignableFrom(item.GetType()))
+                        return (AreaTypeStyleType)item;
+                }
+
+                return null;
+            }
+            set
+            {
+                //Remove old one if it exists
+                var item = this.AreaStyle;
+                if (item != null)
+                {
+                    this.itemsField.Remove(item);
+                }
+                //Put the new one in if it is not null
+                if (value != null)
+                {
+                    this.itemsField.Add(value);   
+                }
+            }
+        }
+
+        [XmlIgnore]
+        public LineTypeStyleType LineStyle
+        {
+            get
+            {
+                foreach (var item in this.itemsField)
+                {
+                    if (typeof(LineTypeStyleType).IsAssignableFrom(item.GetType()))
+                        return (LineTypeStyleType)item;
+                }
+
+                return null;
+            }
+            set
+            {
+                //Remove old one if it exists
+                var item = this.LineStyle;
+                if (item != null)
+                {
+                    this.itemsField.Remove(item);
+                }
+                //Put the new one in if it is not null
+                if (value != null)
+                {
+                    this.itemsField.Add(value);
+                }
+            }
+        }
+        
+        [XmlIgnore]
+        public PointTypeStyleType PointStyle
+        {
+            get
+            {
+                foreach (var item in this.itemsField)
+                {
+                    if (typeof(PointTypeStyleType).IsAssignableFrom(item.GetType()))
+                        return (PointTypeStyleType)item;
+                }
+
+                return null;
+            }
+            set
+            {
+                //Remove old one if it exists
+                var item = this.PointStyle;
+                if (item != null)
+                {
+                    this.itemsField.Remove(item);
+                }
+                //Put the new one in if it is not null
+                if (value != null)
+                {
+                    this.itemsField.Add(value);
+                }
+            }
+        }
     }
 
     partial class LayerDefinition : ILayerDefinition
     {
-        internal LayerDefinition() { } 
+        //internal LayerDefinition() { } 
 
         private static readonly Version RES_VERSION = new Version(1, 0, 0);
 
@@ -282,4 +392,101 @@
             get { return this.Item; }
         }
     }
+
+    partial class StrokeType
+    {
+        internal StrokeType() { }
+    }
+
+    partial class FillType
+    {
+        internal FillType() { } 
+    }
+
+    partial class AreaRuleType : ILayerRule
+    {
+        [XmlIgnore]
+        string ILayerRule.Filter
+        {
+            get
+            {
+                return this.Filter;
+            }
+            set
+            {
+                this.Filter = value;
+            }
+        }
+
+        [XmlIgnore]
+        string ILayerRule.LegendLabel
+        {
+            get
+            {
+                return this.LegendLabel;
+            }
+            set
+            {
+                this.LegendLabel = value;
+            }
+        }
+    }
+
+    partial class PointRuleType : ILayerRule
+    {
+        [XmlIgnore]
+        string ILayerRule.Filter
+        {
+            get
+            {
+                return this.Filter;
+            }
+            set
+            {
+                this.Filter = value;
+            }
+        }
+
+        [XmlIgnore]
+        string ILayerRule.LegendLabel
+        {
+            get
+            {
+                return this.LegendLabel;
+            }
+            set
+            {
+                this.LegendLabel = value;
+            }
+        }
+    }
+
+    partial class LineRuleType : ILayerRule
+    {
+        [XmlIgnore]
+        string ILayerRule.Filter
+        {
+            get
+            {
+                return this.Filter;
+            }
+            set
+            {
+                this.Filter = value;
+            }
+        }
+
+        [XmlIgnore]
+        string ILayerRule.LegendLabel
+        {
+            get
+            {
+                return this.LegendLabel;
+            }
+            set
+            {
+                this.LegendLabel = value;
+            }
+        }
+    }
 }

Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/ObjectFactory.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/ObjectFactory.cs	2010-07-23 01:43:33 UTC (rev 5049)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/ObjectFactory.cs	2010-07-23 12:38:06 UTC (rev 5050)
@@ -31,6 +31,7 @@
 using OSGeo.MapGuide.ObjectModels.PrintLayout;
 using OSGeo.MapGuide.ObjectModels.LoadProcedure;
 using OSGeo.MapGuide.ObjectModels.Common;
+using System.Drawing;
 
 namespace OSGeo.MapGuide.MaestroAPI.ObjectModels
 {
@@ -637,5 +638,160 @@
                 User = new System.ComponentModel.BindingList<ResourceSecurityTypeUsersUser>()
             };
         }
+
+        /// <summary>
+        /// Creates a fill
+        /// </summary>
+        /// <param name="p"></param>
+        /// <param name="color"></param>
+        /// <param name="color_3"></param>
+        /// <returns></returns>
+        public static FillType CreateFill(string pattern, System.Drawing.Color background, System.Drawing.Color foreground)
+        {
+            return new FillType()
+            {
+                BackgroundColor = Utility.SerializeHTMLColor(background, true),
+                FillPattern = pattern,
+                ForegroundColor = Utility.SerializeHTMLColor(foreground, true)
+            };
+        }
+
+        /// <summary>
+        /// Creates a line stroke with default settings
+        /// </summary>
+        /// <param name="color"></param>
+        /// <returns></returns>
+        public static StrokeType CreateStroke(System.Drawing.Color color)
+        {
+            return new StrokeType()
+            {
+                Color = Utility.SerializeHTMLColor(color, true),
+                LineStyle = "Solid",
+                Thickness = "1",
+                Unit = LengthUnitType.Points
+            };
+        }
+
+        public static StrokeType CreateDefaultStroke()
+        {
+            return CreateStroke(Color.Black);
+        }
+
+        public static PointTypeStyleType CreateDefaultPointStyle()
+        {
+            return new PointTypeStyleType()
+            {
+                PointRule = new System.ComponentModel.BindingList<PointRuleType>()
+            };
+        }
+
+        public static LineTypeStyleType CreateDefaultLineStyle()
+        {
+            return new LineTypeStyleType()
+            {
+                LineRule = new System.ComponentModel.BindingList<LineRuleType>()
+            };
+        }
+
+        public static AreaTypeStyleType CreateDefaultAreaStyle()
+        {
+            return new AreaTypeStyleType()
+            {
+                AreaRule = new System.ComponentModel.BindingList<AreaRuleType>()
+            };
+        }
+
+        public static VectorScaleRangeType CreateVectorScaleRange()
+        {
+            return new VectorScaleRangeType()
+            {
+                Items = new System.ComponentModel.BindingList<object>(),
+                AreaStyle = CreateDefaultAreaStyle(),
+                LineStyle = CreateDefaultLineStyle(),
+                PointStyle = CreateDefaultPointStyle()
+            };
+        }
+
+        public static FillType CreateDefaultFill()
+        {
+            return CreateFill("Solid", Color.White, Color.Black);
+        }
+
+        public static MarkSymbolType CreateDefaultMarkSymbol()
+        {
+            return new MarkSymbolType()
+            {
+                Edge = CreateDefaultStroke(),
+                Fill = CreateDefaultFill(),
+                SizeContext = SizeContextType.DeviceUnits,
+                MaintainAspect = true,
+                Rotation = "0",
+                SizeX = "10",
+                SizeY = "10",
+                Unit = LengthUnitType.Points
+            };
+        }
+
+        public static PointSymbolization2DType CreateDefaultPointSymbolization2D()
+        {
+            return new PointSymbolization2DType()
+            {
+                Item = CreateDefaultMarkSymbol()
+            };
+        }
+
+        public static PointRuleType CreatePointRule()
+        {
+            return new PointRuleType()
+            {
+                Item = CreateDefaultPointSymbolization2D()
+            };
+        }
+
+        public static AreaRuleType CreateAreaRule()
+        {
+            return new AreaRuleType()
+            {
+                Item = new AreaSymbolizationFillType()
+                {
+                    Fill = CreateDefaultFill(),
+                    Stroke = CreateDefaultStroke()
+                }
+            };
+        }
+
+        public static LineRuleType CreateLineRule()
+        {
+            return new LineRuleType()
+            {
+                Items = new System.ComponentModel.BindingList<StrokeType>()
+                {
+                    CreateDefaultStroke()
+                }
+            };
+        }
+
+        public static TextSymbolType CreateDefaultTextSymbol()
+        {
+            return new TextSymbolType()
+            {
+                AdvancedPlacement = null,
+                BackgroundColor = Utility.SerializeHTMLColor(Color.White, true),
+                BackgroundStyle = BackgroundStyleType.Transparent,
+                Bold = "false",
+                FontName = "Arial",
+                ForegroundColor = Utility.SerializeHTMLColor(Color.Black, true),
+                HorizontalAlignment = "'Center'",
+                Italic = "false",
+                Rotation = "0",
+                SizeContext = SizeContextType.DeviceUnits,
+                SizeX = "10",
+                SizeY = "10",
+                Text = "",
+                Underlined = "false",
+                Unit = LengthUnitType.Points,
+                VerticalAlignment = "'Baseline'"
+            };
+        }
     }
 }



More information about the mapguide-commits mailing list