[mapguide-commits] r4894 - in sandbox/maestro-2.5: Maestro.Base/Commands Maestro.Editors Maestro.Editors/Common Maestro.Editors/DrawingSource Maestro.Editors/FeatureSource Maestro.Editors/FeatureSource/Preview Maestro.Editors/LayerDefinition Maestro.Editors/LayerDefinition/Scales Maestro.Editors/LayerDefinition/Thematics Maestro.Editors/LayerDefinition/Vector Maestro.Editors/MapDefinition Maestro.Editors/PrintLayout Maestro.Editors/Properties Maestro.Editors/Resources Maestro.Shared.UI Maestro.Shared.UI/Properties Maestro.Shared.UI/Resources

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Mon May 17 08:44:09 EDT 2010


Author: jng
Date: 2010-05-17 08:44:09 -0400 (Mon, 17 May 2010)
New Revision: 4894

Added:
   sandbox/maestro-2.5/Maestro.Editors/Common/
   sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboBox.cs
   sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboBox.resx
   sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboWithTransparency.cs
   sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboWithTransparency.designer.cs
   sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboWithTransparency.resx
   sandbox/maestro-2.5/Maestro.Editors/Common/CoordinateSystemPicker.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/Common/CoordinateSystemPicker.cs
   sandbox/maestro-2.5/Maestro.Editors/Common/CoordinateSystemPicker.resx
   sandbox/maestro-2.5/Maestro.Editors/Common/CustomCombo.cs
   sandbox/maestro-2.5/Maestro.Editors/Common/CustomCombo.resx
   sandbox/maestro-2.5/Maestro.Editors/Common/DataFilesCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/Common/DataFilesCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/Common/DataFilesCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/Common/FdoProviderPicker.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/Common/FdoProviderPicker.cs
   sandbox/maestro-2.5/Maestro.Editors/Common/FdoProviderPicker.resx
   sandbox/maestro-2.5/Maestro.Editors/Common/SourceDataCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/Common/SourceDataCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/Common/SourceDataCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/Common/SymbolPicker.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/Common/SymbolPicker.cs
   sandbox/maestro-2.5/Maestro.Editors/Common/SymbolPicker.resx
   sandbox/maestro-2.5/Maestro.Editors/DrawingSource/DrawingSourceEditorCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/DrawingSource/DrawingSourceEditorCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/DrawingSource/DrawingSourceEditorCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/DrawingSource/Preview/
   sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SheetSectionControl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SheetSectionControl.cs
   sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SheetSectionControl.resx
   sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SourceSectionCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SourceSectionCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SourceSectionCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/
   sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/LocalFeatureSourcePreviewCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/LocalFeatureSourcePreviewCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/LocalFeatureSourcePreviewCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/PreviewPane.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/PreviewPane.cs
   sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/PreviewPane.resx
   sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/SqlQueryCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/SqlQueryCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/SqlQueryCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/StandardQueryCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/StandardQueryCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/StandardQueryCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Drawing/
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Geometry/
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/LayerPropertiesSectionCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/LayerPropertiesSectionCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/LayerPropertiesSectionCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Raster/
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ConditionCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ConditionCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ConditionCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ItemStyleCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ItemStyleCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ItemStyleCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeConditionsCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeConditionsCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeConditionsCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeGeometryStyleCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeGeometryStyleCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeGeometryStyleCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeListCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeListCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeListCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Thematics/
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Thematics/ThemeDialog.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Thematics/ThemeDialog.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Thematics/ThemeDialog.resx
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/MapDefinition/
   sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapDefinitionEditorCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapDefinitionEditorCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapDefinitionEditorCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapSettingsSectionCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapSettingsSectionCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapSettingsSectionCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/PrintLayout/Logos/
   sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomLogosSectionCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomLogosSectionCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomLogosSectionCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomTextSectionCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomTextSectionCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomTextSectionCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintLayoutEditorCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintLayoutEditorCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintLayoutEditorCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintPagePropertiesSectionCtrl.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintPagePropertiesSectionCtrl.cs
   sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintPagePropertiesSectionCtrl.resx
   sandbox/maestro-2.5/Maestro.Editors/PrintLayout/Text/
   sandbox/maestro-2.5/Maestro.Editors/Resources/arrow-090.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/arrow-270.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/arrow-circle-135.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/arrow-return-180.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/control-stop-square.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/control.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/cross-circle-frame.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/cross.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/document--pencil.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/document-copy.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/drive-upload.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/magnifier.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/minus-circle.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/plus-circle.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/sort-number.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/sql.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/table--arrow.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/tick-circle-frame.png
   sandbox/maestro-2.5/Maestro.Editors/Resources/tick.png
   sandbox/maestro-2.5/Maestro.Shared.UI/Resources/chevron-expand.png
   sandbox/maestro-2.5/Maestro.Shared.UI/Resources/chevron.png
Removed:
   sandbox/maestro-2.5/Maestro.Shared.UI/ToolStripSpringTextBox.cs
Modified:
   sandbox/maestro-2.5/Maestro.Base/Commands/LoginCommand.cs
   sandbox/maestro-2.5/Maestro.Editors/Maestro.Editors.csproj
   sandbox/maestro-2.5/Maestro.Editors/Properties/Resources.Designer.cs
   sandbox/maestro-2.5/Maestro.Editors/Properties/Resources.resx
   sandbox/maestro-2.5/Maestro.Shared.UI/CollapsiblePanel.cs
   sandbox/maestro-2.5/Maestro.Shared.UI/CollapsiblePanel.designer.cs
   sandbox/maestro-2.5/Maestro.Shared.UI/Maestro.Shared.UI.csproj
   sandbox/maestro-2.5/Maestro.Shared.UI/Properties/Resources.Designer.cs
   sandbox/maestro-2.5/Maestro.Shared.UI/Properties/Resources.resx
Log:
This submission includes some visual tweaks to the CollapsiblePanel shared component and adds a whole lot of skeleton user interfaces (which obv. do nothing at the moment)

Modified: sandbox/maestro-2.5/Maestro.Base/Commands/LoginCommand.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/Commands/LoginCommand.cs	2010-05-17 09:29:37 UTC (rev 4893)
+++ sandbox/maestro-2.5/Maestro.Base/Commands/LoginCommand.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -26,6 +26,7 @@
 using Maestro.Base.Services;
 using System.Diagnostics;
 using Maestro.Base.UI;
+using Maestro.Base.Editor;
 
 namespace Maestro.Base.Commands
 {

Added: sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboBox.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboBox.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboBox.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,285 @@
+#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
+{
+
+    [Serializable]
+	public class ColorComboBox
+		: CustomCombo
+	{
+		private bool m_allowTransparent = false;
+		private SpecialCell m_currentColor;
+        private ColorDialog m_colorPicker;
+        private static ColorDialog m_sharedColorPicker;
+
+		public ColorComboBox()
+			: base()
+		{
+			if (!this.DesignMode)
+			{
+				m_currentColor = new SpecialCell(SpecialCell.CellTypes.CurrentColor);
+				base.SetCustomRender(new RenderCustomItem(ColorComboRender));
+
+                //ResetColors();
+			}
+		}
+
+        public void ResetColors()
+        {
+            base.Items.Clear();
+
+            if (m_allowTransparent)
+                base.Items.Add(SpecialCell.Transparent);
+
+            foreach (Color c in KnownColors)
+                base.Items.Add(c);
+            base.Items.Add(m_currentColor);
+            base.Items.Add(SpecialCell.MoreColors);
+        }
+
+		[ System.ComponentModel.Browsable(false), System.ComponentModel.ReadOnly(true) ]
+		public bool AllowTransparent
+		{
+			get { return m_allowTransparent; }
+			set { m_allowTransparent = value; }
+		}
+
+		[ System.ComponentModel.Browsable(false), System.ComponentModel.ReadOnly(true) ]
+		public bool TransparentSelected
+		{
+			get { return this.SelectedItem == SpecialCell.Transparent; }
+			set 
+			{ 
+				if (value)
+					this.SelectedItem = SpecialCell.Transparent;
+				else
+					this.SelectedItem = m_currentColor;
+			}
+		}
+
+		[ System.ComponentModel.Browsable(false), System.ComponentModel.ReadOnly(true) ]
+		public Color CurrentColor
+		{
+			get 
+			{
+				if (this.SelectedItem == null)
+					return m_currentColor.Color;
+				else if (this.SelectedItem.GetType() == typeof(SpecialCell))
+					return ((SpecialCell)this.SelectedItem).Color;
+				else
+					return (Color)this.SelectedItem;
+			}
+			set
+			{
+                if (Array.IndexOf(KnownColors, value) > 0)
+                    this.SelectedItem = value;
+                else if (value == SpecialCell.Transparent.Color && this.AllowTransparent)
+                    this.SelectedItem = SpecialCell.Transparent;
+                else
+                {
+                    m_currentColor.Color = value;
+                    this.SelectedItem = m_currentColor;
+                }
+			}
+	
+		}
+
+		protected override void OnMeasureItem(MeasureItemEventArgs e)
+		{
+			if (e.Index < 0)
+				return;
+
+			if (this.Items[e.Index].GetType() == typeof(SpecialCell))
+			{
+				SpecialCell c = (SpecialCell)this.Items[e.Index];
+				if (c.CellType == SpecialCell.CellTypes.CurrentColor)
+					e.ItemHeight = 0;
+				else if (c.CellType == SpecialCell.CellTypes.Transparent && !m_allowTransparent)
+					e.ItemHeight = 0;
+				else
+					base.OnMeasureItem(e);
+			}
+			else
+				base.OnMeasureItem (e);
+		}
+
+
+
+		protected override void OnSelectedIndexChanged(EventArgs e)
+		{
+            if (this.SelectedItem != null && this.SelectedItem.ToString() == Properties.Resources.MoreColorsName)
+            {
+                ColorDialog dlg = this.ColorPicker;
+
+                dlg.FullOpen = true;
+                dlg.SolidColorOnly = true;
+                dlg.AllowFullOpen = true;
+                dlg.Color = m_currentColor.Color;
+                this.SelectedItem = m_currentColor;
+
+                if (dlg.ShowDialog(this) == DialogResult.OK)
+                {
+                    if (Array.IndexOf(KnownColors, dlg.Color) > 0)
+                        this.SelectedItem = dlg.Color;
+                    else
+                        m_currentColor.Color = dlg.Color;
+                }
+            }
+            else
+                m_currentColor.Color = this.CurrentColor; 
+			base.OnSelectedIndexChanged (e);
+		}
+
+
+		private const int MARGIN = 2;
+
+		private readonly Color[] KnownColors = 
+		{
+			Color.Black,
+			Color.White,
+			Color.DarkRed,
+			Color.DarkGreen,
+			Color.Goldenrod,
+			Color.DarkBlue,
+			Color.DarkMagenta,
+			Color.DarkCyan,
+			Color.LightGray,
+			Color.Gray,
+			Color.Red,
+			Color.Green,
+			Color.Yellow,
+			Color.Blue,
+			Color.Magenta,
+			Color.Cyan
+		};
+
+		[ System.ComponentModel.Browsable(false), System.ComponentModel.ReadOnly(true) ]
+		public new ComboBox.ObjectCollection Items
+		{
+			get 
+			{
+				return base.Items;
+			}
+		}
+
+		private class SpecialCell
+		{
+			public enum CellTypes
+			{
+				Transparent,
+				MoreColors,
+				CurrentColor
+			}
+
+			private CellTypes m_cellType;
+			private Color m_color;
+			public SpecialCell(CellTypes celltype)
+			{
+				m_cellType = celltype;
+                if (celltype == CellTypes.Transparent)
+                    m_color = System.Drawing.Color.Transparent;
+			}
+
+			public Color Color
+			{
+				get { return m_color; }
+				set { m_color = value; }
+			}
+
+			public CellTypes CellType
+			{
+				get { return m_cellType; }
+			}
+
+			public override string ToString()
+			{
+				if (m_cellType == CellTypes.MoreColors)
+					return Properties.Resources.MoreColorsName;
+				else if (m_cellType == CellTypes.Transparent)
+					return Properties.Resources.TransparentName;
+				else
+					return base.ToString ();
+			}
+
+			public static readonly SpecialCell MoreColors = new SpecialCell(CellTypes.MoreColors);
+			public static readonly SpecialCell Transparent = new SpecialCell(CellTypes.Transparent);
+
+		}
+
+		private bool ColorComboRender(DrawItemEventArgs e, object value)
+		{
+			Color color;
+			if (value == null)
+				return false;
+
+			if (value.GetType() == typeof(SpecialCell))
+			{
+				if (value == m_currentColor)
+					color = ((SpecialCell)value).Color;
+				else
+					return false;
+			}
+			else if (value.GetType() != typeof(Color))
+				return false;
+			else
+				color = (Color)value;
+
+			if (!this.Enabled)
+			{
+				int median = (color.R + color.G + color.B) / 3;
+				median = Math.Max(Math.Min(median, 205), 50);
+				color = Color.FromArgb(median, median, median);
+			}
+
+
+			e.DrawBackground();
+
+			Rectangle r = new Rectangle(e.Bounds.X + MARGIN, e.Bounds.Y + MARGIN, e.Bounds.Width - MARGIN * 2, e.Bounds.Height - MARGIN * 2);
+			using (Brush b = new SolidBrush(color))
+				e.Graphics.FillRectangle(b, r);
+			e.Graphics.DrawRectangle(Pens.Black, r);
+
+			if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
+				e.DrawFocusRectangle();
+			
+			return true;
+		}
+
+        public ColorDialog ColorPicker
+        {
+            get 
+            {
+                if (m_colorPicker == null)
+                {
+                    if (m_sharedColorPicker == null)
+                        m_sharedColorPicker = new ColorDialog();
+
+                    m_colorPicker = m_sharedColorPicker;
+                }
+                return m_colorPicker; 
+            }
+            set { m_colorPicker = value; }
+        }
+    }
+}
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboBox.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboBox.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboBox.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -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>

Added: sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboWithTransparency.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboWithTransparency.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboWithTransparency.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,90 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.Common
+{
+    public partial class ColorComboWithTransparency : UserControl
+    {
+        private bool m_isUpdating = false;
+
+        public ColorComboWithTransparency()
+        {
+            InitializeComponent();
+            colorCombo.AllowTransparent = true;
+            colorCombo.ResetColors();
+        }
+
+        public event EventHandler CurrentColorChanged;
+
+        public Color CurrentColor
+        {
+            get { return Color.FromArgb((byte.MaxValue - transparencySlider.Value), colorCombo.CurrentColor); }
+            set
+            {
+                try
+                {
+                    m_isUpdating = true;
+
+                    if (value.A == 0)
+                        colorCombo.CurrentColor = Color.Transparent;
+                    else
+                        colorCombo.CurrentColor = Color.FromArgb(byte.MaxValue, value);
+                    transparencySlider.Value = byte.MaxValue - value.A;
+
+                    if (CurrentColorChanged != null)
+                        CurrentColorChanged(this, null);
+                    
+                    colorCombo.Refresh();
+                }
+                finally
+                {
+                    m_isUpdating = false;
+                }
+            }
+        }
+
+        private void colorCombo_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (m_isUpdating)
+                return;
+
+            if (CurrentColorChanged != null)
+                CurrentColorChanged(this, null);
+        }
+
+        private void transparencySlider_ValueChanged(object sender, EventArgs e)
+        {
+            percentageLabel.Text = ((int)((transparencySlider.Value / (double)byte.MaxValue) * 100)).ToString() + "%";
+
+            if (m_isUpdating)
+                return;
+
+            if (CurrentColorChanged != null)
+                CurrentColorChanged(this, null);
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboWithTransparency.designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboWithTransparency.designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboWithTransparency.designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,90 @@
+namespace Maestro.Editors.Common
+{
+    partial class ColorComboWithTransparency
+    {
+        /// <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.transparencySlider = new System.Windows.Forms.TrackBar();
+            this.percentageLabel = new System.Windows.Forms.Label();
+            this.colorCombo = new ColorComboBox();
+            ((System.ComponentModel.ISupportInitialize)(this.transparencySlider)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // transparencySlider
+            // 
+            this.transparencySlider.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.transparencySlider.Location = new System.Drawing.Point(0, 24);
+            this.transparencySlider.Maximum = 255;
+            this.transparencySlider.Name = "transparencySlider";
+            this.transparencySlider.Size = new System.Drawing.Size(256, 45);
+            this.transparencySlider.TabIndex = 1;
+            this.transparencySlider.TickStyle = System.Windows.Forms.TickStyle.None;
+            this.transparencySlider.ValueChanged += new System.EventHandler(this.transparencySlider_ValueChanged);
+            // 
+            // percentageLabel
+            // 
+            this.percentageLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.percentageLabel.Location = new System.Drawing.Point(264, 24);
+            this.percentageLabel.Name = "percentageLabel";
+            this.percentageLabel.Size = new System.Drawing.Size(36, 23);
+            this.percentageLabel.TabIndex = 2;
+            this.percentageLabel.Text = "0%";
+            this.percentageLabel.TextAlign = System.Drawing.ContentAlignment.TopRight;
+            // 
+            // colorCombo
+            // 
+            this.colorCombo.Dock = System.Windows.Forms.DockStyle.Top;
+            this.colorCombo.FormattingEnabled = true;
+            this.colorCombo.Location = new System.Drawing.Point(0, 0);
+            this.colorCombo.Name = "colorCombo";
+            this.colorCombo.Size = new System.Drawing.Size(305, 21);
+            this.colorCombo.TabIndex = 0;
+            this.colorCombo.SelectedIndexChanged += new System.EventHandler(this.colorCombo_SelectedIndexChanged);
+            // 
+            // ColorComboWithTransparency
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.percentageLabel);
+            this.Controls.Add(this.transparencySlider);
+            this.Controls.Add(this.colorCombo);
+            this.Name = "ColorComboWithTransparency";
+            this.Size = new System.Drawing.Size(305, 49);
+            ((System.ComponentModel.ISupportInitialize)(this.transparencySlider)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private ColorComboBox colorCombo;
+        private System.Windows.Forms.TrackBar transparencySlider;
+        private System.Windows.Forms.Label percentageLabel;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboWithTransparency.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboWithTransparency.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/ColorComboWithTransparency.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/Common/CoordinateSystemPicker.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/CoordinateSystemPicker.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/CoordinateSystemPicker.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,389 @@
+namespace Maestro.Editors.Common
+{
+    partial class CoordinateSystemPicker
+    {
+        /// <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()
+        {
+            this.SelectByList = new System.Windows.Forms.RadioButton();
+            this.CancelBtn = new System.Windows.Forms.Button();
+            this.OKBtn = new System.Windows.Forms.Button();
+            this.SelectByEPSGCode = new System.Windows.Forms.RadioButton();
+            this.SelectByEPSGCodeGroup = new System.Windows.Forms.GroupBox();
+            this.EPSGCodeText = new System.Windows.Forms.ComboBox();
+            this.ValidateEPSG = new System.Windows.Forms.Button();
+            this.label4 = new System.Windows.Forms.Label();
+            this.SelectByCoordSysCode = new System.Windows.Forms.RadioButton();
+            this.SelectByCoordSysCodeGroup = new System.Windows.Forms.GroupBox();
+            this.CoordSysCodeText = new System.Windows.Forms.ComboBox();
+            this.ValidateCoordSysCode = new System.Windows.Forms.Button();
+            this.label5 = new System.Windows.Forms.Label();
+            this.SelectByWKT = new System.Windows.Forms.RadioButton();
+            this.SelectByWKTGroup = new System.Windows.Forms.GroupBox();
+            this.ValidateWKT = new System.Windows.Forms.Button();
+            this.WKTText = new System.Windows.Forms.TextBox();
+            this.label3 = new System.Windows.Forms.Label();
+            this.SelectByListGroup = new System.Windows.Forms.GroupBox();
+            this.CoordinateSystem = new System.Windows.Forms.ComboBox();
+            this.CoordinateCategory = new System.Windows.Forms.ComboBox();
+            this.CoordinateSystemLabel = new System.Windows.Forms.Label();
+            this.label1 = new System.Windows.Forms.Label();
+            this.CoordinateWait = new System.Windows.Forms.Label();
+            this.SelectByEPSGCodeGroup.SuspendLayout();
+            this.SelectByCoordSysCodeGroup.SuspendLayout();
+            this.SelectByWKTGroup.SuspendLayout();
+            this.SelectByListGroup.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // SelectByList
+            // 
+            this.SelectByList.Checked = true;
+            this.SelectByList.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.SelectByList.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.SelectByList.Location = new System.Drawing.Point(16, 10);
+            this.SelectByList.Name = "SelectByList";
+            this.SelectByList.Size = new System.Drawing.Size(96, 16);
+            this.SelectByList.TabIndex = 16;
+            this.SelectByList.TabStop = true;
+            this.SelectByList.Text = "Select by list";
+            // 
+            // CancelBtn
+            // 
+            this.CancelBtn.Anchor = System.Windows.Forms.AnchorStyles.Top;
+            this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.CancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.CancelBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.CancelBtn.Location = new System.Drawing.Point(440, 290);
+            this.CancelBtn.Name = "CancelBtn";
+            this.CancelBtn.Size = new System.Drawing.Size(80, 32);
+            this.CancelBtn.TabIndex = 25;
+            this.CancelBtn.Text = "Cancel";
+            // 
+            // OKBtn
+            // 
+            this.OKBtn.Anchor = System.Windows.Forms.AnchorStyles.Top;
+            this.OKBtn.DialogResult = System.Windows.Forms.DialogResult.OK;
+            this.OKBtn.Enabled = false;
+            this.OKBtn.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.OKBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.OKBtn.Location = new System.Drawing.Point(354, 290);
+            this.OKBtn.Name = "OKBtn";
+            this.OKBtn.Size = new System.Drawing.Size(80, 32);
+            this.OKBtn.TabIndex = 24;
+            this.OKBtn.Text = "OK";
+            // 
+            // SelectByEPSGCode
+            // 
+            this.SelectByEPSGCode.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.SelectByEPSGCode.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.SelectByEPSGCode.Location = new System.Drawing.Point(16, 226);
+            this.SelectByEPSGCode.Name = "SelectByEPSGCode";
+            this.SelectByEPSGCode.Size = new System.Drawing.Size(184, 16);
+            this.SelectByEPSGCode.TabIndex = 23;
+            this.SelectByEPSGCode.Text = "Type EPSG code";
+            // 
+            // SelectByEPSGCodeGroup
+            // 
+            this.SelectByEPSGCodeGroup.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.SelectByEPSGCodeGroup.Controls.Add(this.EPSGCodeText);
+            this.SelectByEPSGCodeGroup.Controls.Add(this.ValidateEPSG);
+            this.SelectByEPSGCodeGroup.Controls.Add(this.label4);
+            this.SelectByEPSGCodeGroup.Enabled = false;
+            this.SelectByEPSGCodeGroup.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.SelectByEPSGCodeGroup.Location = new System.Drawing.Point(8, 226);
+            this.SelectByEPSGCodeGroup.Name = "SelectByEPSGCodeGroup";
+            this.SelectByEPSGCodeGroup.Size = new System.Drawing.Size(512, 56);
+            this.SelectByEPSGCodeGroup.TabIndex = 22;
+            this.SelectByEPSGCodeGroup.TabStop = false;
+            // 
+            // EPSGCodeText
+            // 
+            this.EPSGCodeText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.EPSGCodeText.Location = new System.Drawing.Point(168, 24);
+            this.EPSGCodeText.Name = "EPSGCodeText";
+            this.EPSGCodeText.Size = new System.Drawing.Size(272, 21);
+            this.EPSGCodeText.TabIndex = 6;
+            // 
+            // ValidateEPSG
+            // 
+            this.ValidateEPSG.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ValidateEPSG.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.ValidateEPSG.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.ValidateEPSG.Location = new System.Drawing.Point(448, 24);
+            this.ValidateEPSG.Name = "ValidateEPSG";
+            this.ValidateEPSG.Size = new System.Drawing.Size(56, 24);
+            this.ValidateEPSG.TabIndex = 5;
+            this.ValidateEPSG.Text = "Validate";
+            // 
+            // label4
+            // 
+            this.label4.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.label4.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label4.Location = new System.Drawing.Point(8, 24);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(144, 16);
+            this.label4.TabIndex = 3;
+            this.label4.Text = "Coordinate system code";
+            // 
+            // SelectByCoordSysCode
+            // 
+            this.SelectByCoordSysCode.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.SelectByCoordSysCode.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.SelectByCoordSysCode.Location = new System.Drawing.Point(16, 162);
+            this.SelectByCoordSysCode.Name = "SelectByCoordSysCode";
+            this.SelectByCoordSysCode.Size = new System.Drawing.Size(184, 16);
+            this.SelectByCoordSysCode.TabIndex = 21;
+            this.SelectByCoordSysCode.Text = "Type coordinate system code";
+            // 
+            // SelectByCoordSysCodeGroup
+            // 
+            this.SelectByCoordSysCodeGroup.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.SelectByCoordSysCodeGroup.Controls.Add(this.CoordSysCodeText);
+            this.SelectByCoordSysCodeGroup.Controls.Add(this.ValidateCoordSysCode);
+            this.SelectByCoordSysCodeGroup.Controls.Add(this.label5);
+            this.SelectByCoordSysCodeGroup.Enabled = false;
+            this.SelectByCoordSysCodeGroup.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.SelectByCoordSysCodeGroup.Location = new System.Drawing.Point(8, 162);
+            this.SelectByCoordSysCodeGroup.Name = "SelectByCoordSysCodeGroup";
+            this.SelectByCoordSysCodeGroup.Size = new System.Drawing.Size(512, 56);
+            this.SelectByCoordSysCodeGroup.TabIndex = 20;
+            this.SelectByCoordSysCodeGroup.TabStop = false;
+            // 
+            // CoordSysCodeText
+            // 
+            this.CoordSysCodeText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.CoordSysCodeText.Location = new System.Drawing.Point(168, 24);
+            this.CoordSysCodeText.Name = "CoordSysCodeText";
+            this.CoordSysCodeText.Size = new System.Drawing.Size(272, 21);
+            this.CoordSysCodeText.TabIndex = 7;
+            // 
+            // ValidateCoordSysCode
+            // 
+            this.ValidateCoordSysCode.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ValidateCoordSysCode.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.ValidateCoordSysCode.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.ValidateCoordSysCode.Location = new System.Drawing.Point(448, 24);
+            this.ValidateCoordSysCode.Name = "ValidateCoordSysCode";
+            this.ValidateCoordSysCode.Size = new System.Drawing.Size(56, 24);
+            this.ValidateCoordSysCode.TabIndex = 6;
+            this.ValidateCoordSysCode.Text = "Validate";
+            // 
+            // label5
+            // 
+            this.label5.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.label5.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label5.Location = new System.Drawing.Point(8, 24);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(144, 16);
+            this.label5.TabIndex = 3;
+            this.label5.Text = "Coordinate system code";
+            // 
+            // SelectByWKT
+            // 
+            this.SelectByWKT.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.SelectByWKT.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.SelectByWKT.Location = new System.Drawing.Point(16, 98);
+            this.SelectByWKT.Name = "SelectByWKT";
+            this.SelectByWKT.Size = new System.Drawing.Size(112, 16);
+            this.SelectByWKT.TabIndex = 19;
+            this.SelectByWKT.Text = "Type WKT code";
+            // 
+            // SelectByWKTGroup
+            // 
+            this.SelectByWKTGroup.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.SelectByWKTGroup.Controls.Add(this.ValidateWKT);
+            this.SelectByWKTGroup.Controls.Add(this.WKTText);
+            this.SelectByWKTGroup.Controls.Add(this.label3);
+            this.SelectByWKTGroup.Enabled = false;
+            this.SelectByWKTGroup.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.SelectByWKTGroup.Location = new System.Drawing.Point(8, 98);
+            this.SelectByWKTGroup.Name = "SelectByWKTGroup";
+            this.SelectByWKTGroup.Size = new System.Drawing.Size(512, 56);
+            this.SelectByWKTGroup.TabIndex = 18;
+            this.SelectByWKTGroup.TabStop = false;
+            // 
+            // ValidateWKT
+            // 
+            this.ValidateWKT.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ValidateWKT.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.ValidateWKT.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.ValidateWKT.Location = new System.Drawing.Point(448, 24);
+            this.ValidateWKT.Name = "ValidateWKT";
+            this.ValidateWKT.Size = new System.Drawing.Size(56, 24);
+            this.ValidateWKT.TabIndex = 6;
+            this.ValidateWKT.Text = "Validate";
+            // 
+            // WKTText
+            // 
+            this.WKTText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.WKTText.Location = new System.Drawing.Point(160, 24);
+            this.WKTText.Name = "WKTText";
+            this.WKTText.Size = new System.Drawing.Size(280, 20);
+            this.WKTText.TabIndex = 5;
+            // 
+            // label3
+            // 
+            this.label3.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label3.Location = new System.Drawing.Point(8, 24);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(136, 16);
+            this.label3.TabIndex = 2;
+            this.label3.Text = "Well-Known-Text (WKT)";
+            // 
+            // SelectByListGroup
+            // 
+            this.SelectByListGroup.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.SelectByListGroup.Controls.Add(this.CoordinateSystem);
+            this.SelectByListGroup.Controls.Add(this.CoordinateCategory);
+            this.SelectByListGroup.Controls.Add(this.CoordinateSystemLabel);
+            this.SelectByListGroup.Controls.Add(this.label1);
+            this.SelectByListGroup.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.SelectByListGroup.Location = new System.Drawing.Point(8, 10);
+            this.SelectByListGroup.Name = "SelectByListGroup";
+            this.SelectByListGroup.Size = new System.Drawing.Size(512, 80);
+            this.SelectByListGroup.TabIndex = 17;
+            this.SelectByListGroup.TabStop = false;
+            // 
+            // CoordinateSystem
+            // 
+            this.CoordinateSystem.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.CoordinateSystem.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.CoordinateSystem.Enabled = false;
+            this.CoordinateSystem.Location = new System.Drawing.Point(160, 48);
+            this.CoordinateSystem.Name = "CoordinateSystem";
+            this.CoordinateSystem.Size = new System.Drawing.Size(344, 21);
+            this.CoordinateSystem.TabIndex = 3;
+            // 
+            // CoordinateCategory
+            // 
+            this.CoordinateCategory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.CoordinateCategory.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.CoordinateCategory.Location = new System.Drawing.Point(160, 24);
+            this.CoordinateCategory.Name = "CoordinateCategory";
+            this.CoordinateCategory.Size = new System.Drawing.Size(344, 21);
+            this.CoordinateCategory.TabIndex = 2;
+            // 
+            // CoordinateSystemLabel
+            // 
+            this.CoordinateSystemLabel.Enabled = false;
+            this.CoordinateSystemLabel.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.CoordinateSystemLabel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.CoordinateSystemLabel.Location = new System.Drawing.Point(8, 48);
+            this.CoordinateSystemLabel.Name = "CoordinateSystemLabel";
+            this.CoordinateSystemLabel.Size = new System.Drawing.Size(136, 16);
+            this.CoordinateSystemLabel.TabIndex = 1;
+            this.CoordinateSystemLabel.Text = "Coordinate System";
+            // 
+            // label1
+            // 
+            this.label1.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label1.Location = new System.Drawing.Point(8, 24);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(120, 16);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Coordinate Category";
+            // 
+            // CoordinateWait
+            // 
+            this.CoordinateWait.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.CoordinateWait.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.CoordinateWait.Location = new System.Drawing.Point(8, 10);
+            this.CoordinateWait.Name = "CoordinateWait";
+            this.CoordinateWait.Size = new System.Drawing.Size(512, 272);
+            this.CoordinateWait.TabIndex = 26;
+            this.CoordinateWait.Text = "Loading coordinate system, please wait";
+            this.CoordinateWait.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+            // 
+            // CoordinateSystemPicker
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(528, 333);
+            this.ControlBox = false;
+            this.Controls.Add(this.SelectByList);
+            this.Controls.Add(this.CancelBtn);
+            this.Controls.Add(this.OKBtn);
+            this.Controls.Add(this.SelectByEPSGCode);
+            this.Controls.Add(this.SelectByEPSGCodeGroup);
+            this.Controls.Add(this.SelectByCoordSysCode);
+            this.Controls.Add(this.SelectByCoordSysCodeGroup);
+            this.Controls.Add(this.SelectByWKT);
+            this.Controls.Add(this.SelectByWKTGroup);
+            this.Controls.Add(this.SelectByListGroup);
+            this.Controls.Add(this.CoordinateWait);
+            this.Name = "CoordinateSystemPicker";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+            this.Text = "Select Coordinate System";
+            this.SelectByEPSGCodeGroup.ResumeLayout(false);
+            this.SelectByCoordSysCodeGroup.ResumeLayout(false);
+            this.SelectByWKTGroup.ResumeLayout(false);
+            this.SelectByWKTGroup.PerformLayout();
+            this.SelectByListGroup.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.RadioButton SelectByList;
+        private System.Windows.Forms.Button CancelBtn;
+        private System.Windows.Forms.Button OKBtn;
+        private System.Windows.Forms.RadioButton SelectByEPSGCode;
+        private System.Windows.Forms.GroupBox SelectByEPSGCodeGroup;
+        private System.Windows.Forms.ComboBox EPSGCodeText;
+        private System.Windows.Forms.Button ValidateEPSG;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.RadioButton SelectByCoordSysCode;
+        private System.Windows.Forms.GroupBox SelectByCoordSysCodeGroup;
+        private System.Windows.Forms.ComboBox CoordSysCodeText;
+        private System.Windows.Forms.Button ValidateCoordSysCode;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.RadioButton SelectByWKT;
+        private System.Windows.Forms.GroupBox SelectByWKTGroup;
+        private System.Windows.Forms.Button ValidateWKT;
+        private System.Windows.Forms.TextBox WKTText;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.GroupBox SelectByListGroup;
+        private System.Windows.Forms.ComboBox CoordinateSystem;
+        private System.Windows.Forms.ComboBox CoordinateCategory;
+        private System.Windows.Forms.Label CoordinateSystemLabel;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label CoordinateWait;
+    }
+}
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/Common/CoordinateSystemPicker.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/CoordinateSystemPicker.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/CoordinateSystemPicker.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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.Common
+{
+    public partial class CoordinateSystemPicker : Form
+    {
+        public CoordinateSystemPicker()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/Common/CoordinateSystemPicker.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/CoordinateSystemPicker.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/CoordinateSystemPicker.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/Common/CustomCombo.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/CustomCombo.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/CustomCombo.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,139 @@
+#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.Common
+{
+	/// <summary>
+	/// A combobox that is able to display custom items
+	/// </summary>
+    [Serializable]
+    public class CustomCombo : System.Windows.Forms.ComboBox 
+	{
+
+		public CustomCombo()
+			: base()
+		{
+			if (!this.DesignMode)
+			{
+				base.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
+				base.DropDownStyle = ComboBoxStyle.DropDownList;
+			}
+		}
+
+		protected override void OnDrawItem(DrawItemEventArgs e)
+		{
+			bool handled = false;
+
+			if (e.Index < 0)
+				return;
+
+			if (m_render != null)
+				handled = m_render(e, this.Items[e.Index]);
+
+			if (!handled && this.Items[e.Index].GetType().GetInterface(typeof(CustomComboItem).FullName, false) != null)
+				((CustomComboItem)this.Items[e.Index]).DrawItem(e);
+			else if (!handled)
+			{
+				//Standard handler
+				e.DrawBackground();
+				StringFormat format = new StringFormat();
+				format.Trimming = StringTrimming.EllipsisCharacter;
+				format.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.FitBlackBox;
+
+				using(Brush b = new SolidBrush(this.ForeColor))
+					e.Graphics.DrawString(this.Items[e.Index].ToString(), this.Font, b, e.Bounds, format);
+
+				base.OnDrawItem (e);
+
+				if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
+					e.DrawFocusRectangle();
+			}
+		}
+
+		/// <summary>
+		/// Property is overridden to prevent the designer from modifying the value
+		/// </summary>
+		[ System.ComponentModel.Browsable(false), System.ComponentModel.ReadOnly(true) ]
+		public new DrawMode DrawMode
+		{
+			get { return base.DrawMode; }
+			set { base.DrawMode = value; }
+		}
+
+		/// <summary>
+		/// Property is overridden to prevent the designer for modifying the value
+		/// </summary>
+		[ System.ComponentModel.Browsable(false), System.ComponentModel.ReadOnly(true) ]
+		public new ComboBoxStyle DropDownStyle
+		{
+			get { return base.DropDownStyle; }
+			set { base.DropDownStyle = value; }
+		}
+
+
+		/// <summary> 
+		/// Clean up any resources being used.
+		/// </summary>
+		protected override void Dispose( bool disposing )
+		{
+			if( disposing )
+			{
+			}
+			base.Dispose( disposing );
+		}
+
+
+		/// <summary>
+		/// Delegate used for handling custom rendering. Return true if handled, false otherwise
+		/// </summary>
+		public delegate bool RenderCustomItem(DrawItemEventArgs e, object value);
+
+		/// <summary>
+		/// Holder for custom render
+		/// </summary>
+		private RenderCustomItem m_render = null;
+
+        /// <summary>
+        /// Sets the custom render callback item
+        /// </summary>
+        /// <param name="render">The render to use</param>
+        public void SetCustomRender(RenderCustomItem render)
+        {
+            m_render = render;
+        }
+
+		/// <summary>
+		/// Interface for items in custom combo
+		/// </summary>
+		public interface CustomComboItem
+		{
+			/// <summary>
+			/// Method that gets called when an object should be rendered
+			/// </summary>
+			void DrawItem(DrawItemEventArgs e);
+		}
+	}
+}

Added: sandbox/maestro-2.5/Maestro.Editors/Common/CustomCombo.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/CustomCombo.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/CustomCombo.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -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>

Added: sandbox/maestro-2.5/Maestro.Editors/Common/DataFilesCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/DataFilesCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/DataFilesCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,130 @@
+namespace Maestro.Editors.Common
+{
+    partial class DataFilesCtrl
+    {
+        /// <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.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+            this.lstDataFiles = new System.Windows.Forms.ListView();
+            this.btnUpload = new System.Windows.Forms.ToolStripButton();
+            this.btnDownload = new System.Windows.Forms.ToolStripButton();
+            this.btnDelete = new System.Windows.Forms.ToolStripButton();
+            this.btnSetSource = new System.Windows.Forms.ToolStripButton();
+            this.toolStrip1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnUpload,
+            this.btnDownload,
+            this.toolStripSeparator1,
+            this.btnDelete,
+            this.btnSetSource});
+            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Size = new System.Drawing.Size(572, 25);
+            this.toolStrip1.TabIndex = 0;
+            this.toolStrip1.Text = "toolStrip1";
+            // 
+            // toolStripSeparator1
+            // 
+            this.toolStripSeparator1.Name = "toolStripSeparator1";
+            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
+            // 
+            // lstDataFiles
+            // 
+            this.lstDataFiles.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.lstDataFiles.Location = new System.Drawing.Point(0, 25);
+            this.lstDataFiles.Name = "lstDataFiles";
+            this.lstDataFiles.Size = new System.Drawing.Size(572, 191);
+            this.lstDataFiles.TabIndex = 1;
+            this.lstDataFiles.UseCompatibleStateImageBehavior = false;
+            // 
+            // btnUpload
+            // 
+            this.btnUpload.Image = global::Maestro.Editors.Properties.Resources.drive_upload;
+            this.btnUpload.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnUpload.Name = "btnUpload";
+            this.btnUpload.Size = new System.Drawing.Size(60, 22);
+            this.btnUpload.Text = "Upload";
+            this.btnUpload.ToolTipText = "Uploads a file";
+            // 
+            // btnDownload
+            // 
+            this.btnDownload.Image = global::Maestro.Editors.Properties.Resources.drive_download;
+            this.btnDownload.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnDownload.Name = "btnDownload";
+            this.btnDownload.Size = new System.Drawing.Size(74, 22);
+            this.btnDownload.Text = "Download";
+            this.btnDownload.ToolTipText = "Downloads the selected file";
+            // 
+            // btnDelete
+            // 
+            this.btnDelete.Image = global::Maestro.Editors.Properties.Resources.cross_script;
+            this.btnDelete.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnDelete.Name = "btnDelete";
+            this.btnDelete.Size = new System.Drawing.Size(58, 22);
+            this.btnDelete.Text = "Delete";
+            this.btnDelete.ToolTipText = "Deletes the selected item";
+            // 
+            // btnSetSource
+            // 
+            this.btnSetSource.Image = global::Maestro.Editors.Properties.Resources.tick_circle_frame;
+            this.btnSetSource.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnSetSource.Name = "btnSetSource";
+            this.btnSetSource.Size = new System.Drawing.Size(79, 22);
+            this.btnSetSource.Text = "Set Source";
+            this.btnSetSource.ToolTipText = "Marks the selected file as the data source";
+            // 
+            // DataFilesCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.lstDataFiles);
+            this.Controls.Add(this.toolStrip1);
+            this.Name = "DataFilesCtrl";
+            this.Size = new System.Drawing.Size(572, 216);
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.ToolStripButton btnUpload;
+        private System.Windows.Forms.ToolStripButton btnDownload;
+        private System.Windows.Forms.ToolStripButton btnDelete;
+        private System.Windows.Forms.ListView lstDataFiles;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+        private System.Windows.Forms.ToolStripButton btnSetSource;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/Common/DataFilesCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/DataFilesCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/DataFilesCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.Common
+{
+    internal partial class DataFilesCtrl : UserControl
+    {
+        public DataFilesCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/Common/DataFilesCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/DataFilesCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/DataFilesCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,123 @@
+<?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="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/Common/FdoProviderPicker.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/FdoProviderPicker.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/FdoProviderPicker.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,107 @@
+namespace Maestro.Editors.Common
+{
+    partial class FdoProviderPicker
+    {
+        /// <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()
+        {
+            this.CancelBtn = new System.Windows.Forms.Button();
+            this.OKBtn = new System.Windows.Forms.Button();
+            this.label1 = new System.Windows.Forms.Label();
+            this.ProviderList = new System.Windows.Forms.ListBox();
+            this.SuspendLayout();
+            // 
+            // CancelBtn
+            // 
+            this.CancelBtn.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
+            this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.CancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.CancelBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.CancelBtn.Location = new System.Drawing.Point(134, 228);
+            this.CancelBtn.Name = "CancelBtn";
+            this.CancelBtn.Size = new System.Drawing.Size(80, 32);
+            this.CancelBtn.TabIndex = 8;
+            this.CancelBtn.Text = "Cancel";
+            // 
+            // OKBtn
+            // 
+            this.OKBtn.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
+            this.OKBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.OKBtn.Enabled = false;
+            this.OKBtn.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.OKBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.OKBtn.Location = new System.Drawing.Point(30, 228);
+            this.OKBtn.Name = "OKBtn";
+            this.OKBtn.Size = new System.Drawing.Size(80, 32);
+            this.OKBtn.TabIndex = 7;
+            this.OKBtn.Text = "OK";
+            // 
+            // label1
+            // 
+            this.label1.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label1.Location = new System.Drawing.Point(12, 10);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(120, 16);
+            this.label1.TabIndex = 6;
+            this.label1.Text = "Providers on server:";
+            // 
+            // ProviderList
+            // 
+            this.ProviderList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.ProviderList.Location = new System.Drawing.Point(12, 26);
+            this.ProviderList.Name = "ProviderList";
+            this.ProviderList.Size = new System.Drawing.Size(218, 186);
+            this.ProviderList.TabIndex = 5;
+            // 
+            // FdoProviderPicker
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(242, 272);
+            this.ControlBox = false;
+            this.Controls.Add(this.CancelBtn);
+            this.Controls.Add(this.OKBtn);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.ProviderList);
+            this.Name = "FdoProviderPicker";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+            this.Text = "Select FDO Provider";
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Button CancelBtn;
+        private System.Windows.Forms.Button OKBtn;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.ListBox ProviderList;
+
+    }
+}
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/Common/FdoProviderPicker.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/FdoProviderPicker.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/FdoProviderPicker.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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.Common
+{
+    public partial class FdoProviderPicker : Form
+    {
+        public FdoProviderPicker()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/Common/FdoProviderPicker.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/FdoProviderPicker.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/FdoProviderPicker.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/Common/SourceDataCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/SourceDataCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/SourceDataCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,86 @@
+namespace Maestro.Editors.Common
+{
+    partial class SourceDataCtrl
+    {
+        /// <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.label1 = new System.Windows.Forms.Label();
+            this.cmbLocation = new System.Windows.Forms.ComboBox();
+            this.locationBody = new System.Windows.Forms.Panel();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(12, 9);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(67, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "File Location";
+            // 
+            // cmbLocation
+            // 
+            this.cmbLocation.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.cmbLocation.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.cmbLocation.FormattingEnabled = true;
+            this.cmbLocation.Location = new System.Drawing.Point(125, 6);
+            this.cmbLocation.Name = "cmbLocation";
+            this.cmbLocation.Size = new System.Drawing.Size(482, 21);
+            this.cmbLocation.TabIndex = 1;
+            // 
+            // locationBody
+            // 
+            this.locationBody.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.locationBody.Location = new System.Drawing.Point(15, 46);
+            this.locationBody.Name = "locationBody";
+            this.locationBody.Size = new System.Drawing.Size(592, 255);
+            this.locationBody.TabIndex = 2;
+            // 
+            // SourceDataCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.locationBody);
+            this.Controls.Add(this.cmbLocation);
+            this.Controls.Add(this.label1);
+            this.Name = "SourceDataCtrl";
+            this.Size = new System.Drawing.Size(622, 318);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.ComboBox cmbLocation;
+        private System.Windows.Forms.Panel locationBody;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/Common/SourceDataCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/SourceDataCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/SourceDataCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.Common
+{
+    internal partial class SourceDataCtrl : UserControl
+    {
+        public SourceDataCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/Common/SourceDataCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/SourceDataCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/SourceDataCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/Common/SymbolPicker.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/SymbolPicker.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/SymbolPicker.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,129 @@
+namespace Maestro.Editors.Common
+{
+    partial class SymbolPicker
+    {
+        /// <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()
+        {
+            this.label1 = new System.Windows.Forms.Label();
+            this.txtSymbolLibrary = new System.Windows.Forms.TextBox();
+            this.grpAvailableSymbols = new System.Windows.Forms.GroupBox();
+            this.lstSymbols = new System.Windows.Forms.ListView();
+            this.btnOK = new System.Windows.Forms.Button();
+            this.btnCancel = new System.Windows.Forms.Button();
+            this.grpAvailableSymbols.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(13, 13);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(75, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Symbol Library";
+            // 
+            // txtSymbolLibrary
+            // 
+            this.txtSymbolLibrary.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtSymbolLibrary.Location = new System.Drawing.Point(94, 10);
+            this.txtSymbolLibrary.Name = "txtSymbolLibrary";
+            this.txtSymbolLibrary.ReadOnly = true;
+            this.txtSymbolLibrary.Size = new System.Drawing.Size(342, 20);
+            this.txtSymbolLibrary.TabIndex = 1;
+            // 
+            // grpAvailableSymbols
+            // 
+            this.grpAvailableSymbols.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.grpAvailableSymbols.Controls.Add(this.lstSymbols);
+            this.grpAvailableSymbols.Location = new System.Drawing.Point(13, 49);
+            this.grpAvailableSymbols.Name = "grpAvailableSymbols";
+            this.grpAvailableSymbols.Size = new System.Drawing.Size(423, 176);
+            this.grpAvailableSymbols.TabIndex = 2;
+            this.grpAvailableSymbols.TabStop = false;
+            this.grpAvailableSymbols.Text = "Available Symbols";
+            // 
+            // lstSymbols
+            // 
+            this.lstSymbols.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.lstSymbols.Location = new System.Drawing.Point(3, 16);
+            this.lstSymbols.Name = "lstSymbols";
+            this.lstSymbols.Size = new System.Drawing.Size(417, 157);
+            this.lstSymbols.TabIndex = 0;
+            this.lstSymbols.UseCompatibleStateImageBehavior = false;
+            // 
+            // btnOK
+            // 
+            this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnOK.Location = new System.Drawing.Point(277, 231);
+            this.btnOK.Name = "btnOK";
+            this.btnOK.Size = new System.Drawing.Size(75, 23);
+            this.btnOK.TabIndex = 3;
+            this.btnOK.Text = "OK";
+            this.btnOK.UseVisualStyleBackColor = true;
+            // 
+            // btnCancel
+            // 
+            this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnCancel.Location = new System.Drawing.Point(358, 231);
+            this.btnCancel.Name = "btnCancel";
+            this.btnCancel.Size = new System.Drawing.Size(75, 23);
+            this.btnCancel.TabIndex = 4;
+            this.btnCancel.Text = "Cancel";
+            this.btnCancel.UseVisualStyleBackColor = true;
+            // 
+            // SymbolPicker
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(448, 266);
+            this.ControlBox = false;
+            this.Controls.Add(this.btnCancel);
+            this.Controls.Add(this.btnOK);
+            this.Controls.Add(this.grpAvailableSymbols);
+            this.Controls.Add(this.txtSymbolLibrary);
+            this.Controls.Add(this.label1);
+            this.Name = "SymbolPicker";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+            this.Text = "Select Symbol";
+            this.grpAvailableSymbols.ResumeLayout(false);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox txtSymbolLibrary;
+        private System.Windows.Forms.GroupBox grpAvailableSymbols;
+        private System.Windows.Forms.ListView lstSymbols;
+        private System.Windows.Forms.Button btnOK;
+        private System.Windows.Forms.Button btnCancel;
+    }
+}
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/Common/SymbolPicker.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/SymbolPicker.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/SymbolPicker.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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.Common
+{
+    public partial class SymbolPicker : Form
+    {
+        public SymbolPicker()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/Common/SymbolPicker.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Common/SymbolPicker.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/Common/SymbolPicker.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/DrawingSource/DrawingSourceEditorCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/DrawingSource/DrawingSourceEditorCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/DrawingSource/DrawingSourceEditorCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,76 @@
+namespace Maestro.Editors.DrawingSource
+{
+    partial class DrawingSourceEditorCtrl
+    {
+        /// <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.sourceDataCtrl = new Maestro.Editors.DrawingSource.SourceSectionCtrl();
+            this.sheetConfigCtrl = new Maestro.Editors.DrawingSource.SheetSectionControl();
+            this.SuspendLayout();
+            // 
+            // sourceDataCtrl
+            // 
+            this.sourceDataCtrl.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.sourceDataCtrl.Dock = System.Windows.Forms.DockStyle.Top;
+            this.sourceDataCtrl.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.sourceDataCtrl.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.sourceDataCtrl.HeaderText = "DWF File Source";
+            this.sourceDataCtrl.Location = new System.Drawing.Point(0, 0);
+            this.sourceDataCtrl.Name = "sourceDataCtrl";
+            this.sourceDataCtrl.Size = new System.Drawing.Size(509, 265);
+            this.sourceDataCtrl.TabIndex = 0;
+            // 
+            // sheetConfigCtrl
+            // 
+            this.sheetConfigCtrl.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.sheetConfigCtrl.Dock = System.Windows.Forms.DockStyle.Top;
+            this.sheetConfigCtrl.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.sheetConfigCtrl.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.sheetConfigCtrl.HeaderText = "Sheet Configuration";
+            this.sheetConfigCtrl.Location = new System.Drawing.Point(0, 265);
+            this.sheetConfigCtrl.Name = "sheetConfigCtrl";
+            this.sheetConfigCtrl.Size = new System.Drawing.Size(509, 196);
+            this.sheetConfigCtrl.TabIndex = 1;
+            // 
+            // DrawingSourceEditorCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.sheetConfigCtrl);
+            this.Controls.Add(this.sourceDataCtrl);
+            this.Name = "DrawingSourceEditorCtrl";
+            this.Size = new System.Drawing.Size(509, 422);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private SourceSectionCtrl sourceDataCtrl;
+        private SheetSectionControl sheetConfigCtrl;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/DrawingSource/DrawingSourceEditorCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/DrawingSource/DrawingSourceEditorCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/DrawingSource/DrawingSourceEditorCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.DrawingSource
+{
+    public partial class DrawingSourceEditorCtrl : UserControl
+    {
+        public DrawingSourceEditorCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/DrawingSource/DrawingSourceEditorCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/DrawingSource/DrawingSourceEditorCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/DrawingSource/DrawingSourceEditorCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SheetSectionControl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SheetSectionControl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SheetSectionControl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,185 @@
+namespace Maestro.Editors.DrawingSource
+{
+    partial class SheetSectionControl
+    {
+        /// <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.label1 = new System.Windows.Forms.Label();
+            this.lstSheets = new System.Windows.Forms.ListBox();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.numMinX = new System.Windows.Forms.TextBox();
+            this.numMinY = new System.Windows.Forms.TextBox();
+            this.numMaxX = new System.Windows.Forms.TextBox();
+            this.numMaxY = new System.Windows.Forms.TextBox();
+            this.contentPanel.SuspendLayout();
+            this.groupBox1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // contentPanel
+            // 
+            this.contentPanel.Controls.Add(this.groupBox1);
+            this.contentPanel.Controls.Add(this.lstSheets);
+            this.contentPanel.Controls.Add(this.label1);
+            this.contentPanel.Size = new System.Drawing.Size(449, 169);
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(18, 24);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(86, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Available Sheets";
+            // 
+            // lstSheets
+            // 
+            this.lstSheets.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)));
+            this.lstSheets.FormattingEnabled = true;
+            this.lstSheets.Location = new System.Drawing.Point(21, 40);
+            this.lstSheets.Name = "lstSheets";
+            this.lstSheets.Size = new System.Drawing.Size(148, 108);
+            this.lstSheets.TabIndex = 1;
+            // 
+            // groupBox1
+            // 
+            this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.groupBox1.Controls.Add(this.numMaxY);
+            this.groupBox1.Controls.Add(this.numMaxX);
+            this.groupBox1.Controls.Add(this.numMinY);
+            this.groupBox1.Controls.Add(this.numMinX);
+            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.Location = new System.Drawing.Point(186, 24);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(248, 133);
+            this.groupBox1.TabIndex = 2;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Sheet Extents";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(15, 22);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(34, 13);
+            this.label2.TabIndex = 0;
+            this.label2.Text = "Min X";
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(15, 48);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(34, 13);
+            this.label3.TabIndex = 1;
+            this.label3.Text = "Min Y";
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(15, 74);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(37, 13);
+            this.label4.TabIndex = 2;
+            this.label4.Text = "Max X";
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(15, 100);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(37, 13);
+            this.label5.TabIndex = 3;
+            this.label5.Text = "Max Y";
+            // 
+            // numMinX
+            // 
+            this.numMinX.Location = new System.Drawing.Point(73, 19);
+            this.numMinX.Name = "numMinX";
+            this.numMinX.Size = new System.Drawing.Size(151, 20);
+            this.numMinX.TabIndex = 4;
+            // 
+            // numMinY
+            // 
+            this.numMinY.Location = new System.Drawing.Point(73, 45);
+            this.numMinY.Name = "numMinY";
+            this.numMinY.Size = new System.Drawing.Size(151, 20);
+            this.numMinY.TabIndex = 5;
+            // 
+            // numMaxX
+            // 
+            this.numMaxX.Location = new System.Drawing.Point(73, 71);
+            this.numMaxX.Name = "numMaxX";
+            this.numMaxX.Size = new System.Drawing.Size(151, 20);
+            this.numMaxX.TabIndex = 6;
+            // 
+            // numMaxY
+            // 
+            this.numMaxY.Location = new System.Drawing.Point(73, 97);
+            this.numMaxY.Name = "numMaxY";
+            this.numMaxY.Size = new System.Drawing.Size(151, 20);
+            this.numMaxY.TabIndex = 7;
+            // 
+            // SheetSectionControl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.HeaderText = "Sheet Configuration";
+            this.Name = "SheetSectionControl";
+            this.Size = new System.Drawing.Size(449, 196);
+            this.contentPanel.ResumeLayout(false);
+            this.contentPanel.PerformLayout();
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.ListBox lstSheets;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox numMaxY;
+        private System.Windows.Forms.TextBox numMaxX;
+        private System.Windows.Forms.TextBox numMinY;
+        private System.Windows.Forms.TextBox numMinX;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label2;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SheetSectionControl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SheetSectionControl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SheetSectionControl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,39 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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 Maestro.Shared.UI;
+
+namespace Maestro.Editors.DrawingSource
+{
+    [ToolboxItem(true)]
+    internal partial class SheetSectionControl : CollapsiblePanel
+    {
+        public SheetSectionControl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SheetSectionControl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SheetSectionControl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SheetSectionControl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SourceSectionCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SourceSectionCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SourceSectionCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,102 @@
+namespace Maestro.Editors.DrawingSource
+{
+    partial class SourceSectionCtrl
+    {
+        /// <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.sourceDataCtrl1 = new Maestro.Editors.Common.SourceDataCtrl();
+            this.label1 = new System.Windows.Forms.Label();
+            this.txtSourceCs = new System.Windows.Forms.TextBox();
+            this.btnBrowseCs = new System.Windows.Forms.Button();
+            this.contentPanel.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // contentPanel
+            // 
+            this.contentPanel.Controls.Add(this.btnBrowseCs);
+            this.contentPanel.Controls.Add(this.txtSourceCs);
+            this.contentPanel.Controls.Add(this.label1);
+            this.contentPanel.Controls.Add(this.sourceDataCtrl1);
+            this.contentPanel.Size = new System.Drawing.Size(449, 238);
+            // 
+            // sourceDataCtrl1
+            // 
+            this.sourceDataCtrl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.sourceDataCtrl1.Location = new System.Drawing.Point(0, 0);
+            this.sourceDataCtrl1.Name = "sourceDataCtrl1";
+            this.sourceDataCtrl1.Size = new System.Drawing.Size(449, 199);
+            this.sourceDataCtrl1.TabIndex = 0;
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(14, 210);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(95, 13);
+            this.label1.TabIndex = 1;
+            this.label1.Text = "Coordinate System";
+            // 
+            // txtSourceCs
+            // 
+            this.txtSourceCs.Location = new System.Drawing.Point(128, 207);
+            this.txtSourceCs.Name = "txtSourceCs";
+            this.txtSourceCs.Size = new System.Drawing.Size(273, 20);
+            this.txtSourceCs.TabIndex = 2;
+            // 
+            // btnBrowseCs
+            // 
+            this.btnBrowseCs.Location = new System.Drawing.Point(407, 205);
+            this.btnBrowseCs.Name = "btnBrowseCs";
+            this.btnBrowseCs.Size = new System.Drawing.Size(29, 23);
+            this.btnBrowseCs.TabIndex = 3;
+            this.btnBrowseCs.Text = "...";
+            this.btnBrowseCs.UseVisualStyleBackColor = true;
+            // 
+            // SourceSectionCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.HeaderText = "DWF File Source";
+            this.Name = "SourceSectionCtrl";
+            this.Size = new System.Drawing.Size(449, 265);
+            this.contentPanel.ResumeLayout(false);
+            this.contentPanel.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private Maestro.Editors.Common.SourceDataCtrl sourceDataCtrl1;
+        private System.Windows.Forms.TextBox txtSourceCs;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Button btnBrowseCs;
+
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SourceSectionCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SourceSectionCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SourceSectionCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,39 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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 Maestro.Shared.UI;
+
+namespace Maestro.Editors.DrawingSource
+{
+    [ToolboxItem(true)]
+    internal partial class SourceSectionCtrl : CollapsiblePanel
+    {
+        public SourceSectionCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SourceSectionCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SourceSectionCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/DrawingSource/SourceSectionCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/LocalFeatureSourcePreviewCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/LocalFeatureSourcePreviewCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/LocalFeatureSourcePreviewCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,171 @@
+namespace Maestro.Editors.FeatureSource.Preview
+{
+    partial class LocalFeatureSourcePreviewCtrl
+    {
+        /// <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(LocalFeatureSourcePreviewCtrl));
+            this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.btnRefresh = new System.Windows.Forms.ToolStripButton();
+            this.btnSql = new System.Windows.Forms.ToolStripButton();
+            this.btnStandard = new System.Windows.Forms.ToolStripButton();
+            this.tabPreviews = new System.Windows.Forms.TabControl();
+            this.trvSchema = new System.Windows.Forms.TreeView();
+            this.schemaImageList = new System.Windows.Forms.ImageList(this.components);
+            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+            this.splitContainer1.Panel1.SuspendLayout();
+            this.splitContainer1.Panel2.SuspendLayout();
+            this.splitContainer1.SuspendLayout();
+            this.toolStrip1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // splitContainer1
+            // 
+            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+            this.splitContainer1.Name = "splitContainer1";
+            // 
+            // splitContainer1.Panel1
+            // 
+            this.splitContainer1.Panel1.Controls.Add(this.trvSchema);
+            this.splitContainer1.Panel1.Controls.Add(this.toolStrip1);
+            // 
+            // splitContainer1.Panel2
+            // 
+            this.splitContainer1.Panel2.Controls.Add(this.tabPreviews);
+            this.splitContainer1.Size = new System.Drawing.Size(535, 377);
+            this.splitContainer1.SplitterDistance = 175;
+            this.splitContainer1.TabIndex = 0;
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnRefresh,
+            this.toolStripSeparator1,
+            this.btnSql,
+            this.btnStandard});
+            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Size = new System.Drawing.Size(175, 25);
+            this.toolStrip1.TabIndex = 0;
+            this.toolStrip1.Text = "toolStrip1";
+            // 
+            // btnRefresh
+            // 
+            this.btnRefresh.Image = global::Maestro.Editors.Properties.Resources.arrow_circle_135;
+            this.btnRefresh.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnRefresh.Name = "btnRefresh";
+            this.btnRefresh.Size = new System.Drawing.Size(65, 22);
+            this.btnRefresh.Text = "Refresh";
+            // 
+            // btnSql
+            // 
+            this.btnSql.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            this.btnSql.Image = global::Maestro.Editors.Properties.Resources.sql;
+            this.btnSql.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnSql.Name = "btnSql";
+            this.btnSql.Size = new System.Drawing.Size(23, 22);
+            this.btnSql.Text = "SQL";
+            // 
+            // btnStandard
+            // 
+            this.btnStandard.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            this.btnStandard.Image = global::Maestro.Editors.Properties.Resources.magnifier;
+            this.btnStandard.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnStandard.Name = "btnStandard";
+            this.btnStandard.Size = new System.Drawing.Size(23, 22);
+            this.btnStandard.Text = "Standard";
+            // 
+            // tabPreviews
+            // 
+            this.tabPreviews.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.tabPreviews.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
+            this.tabPreviews.Location = new System.Drawing.Point(0, 0);
+            this.tabPreviews.Name = "tabPreviews";
+            this.tabPreviews.SelectedIndex = 0;
+            this.tabPreviews.Size = new System.Drawing.Size(356, 377);
+            this.tabPreviews.TabIndex = 0;
+            // 
+            // trvSchema
+            // 
+            this.trvSchema.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.trvSchema.ImageIndex = 0;
+            this.trvSchema.ImageList = this.schemaImageList;
+            this.trvSchema.Location = new System.Drawing.Point(0, 25);
+            this.trvSchema.Name = "trvSchema";
+            this.trvSchema.SelectedImageIndex = 0;
+            this.trvSchema.Size = new System.Drawing.Size(175, 352);
+            this.trvSchema.TabIndex = 1;
+            // 
+            // schemaImageList
+            // 
+            this.schemaImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("schemaImageList.ImageStream")));
+            this.schemaImageList.TransparentColor = System.Drawing.Color.Transparent;
+            this.schemaImageList.Images.SetKeyName(0, "sitemap-application-blue.png");
+            this.schemaImageList.Images.SetKeyName(1, "table.png");
+            this.schemaImageList.Images.SetKeyName(2, "property.png");
+            this.schemaImageList.Images.SetKeyName(3, "key.png");
+            this.schemaImageList.Images.SetKeyName(4, "layer-shape.png");
+            this.schemaImageList.Images.SetKeyName(5, "image.png");
+            // 
+            // toolStripSeparator1
+            // 
+            this.toolStripSeparator1.Name = "toolStripSeparator1";
+            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
+            // 
+            // LocalFeatureSourcePreviewCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.splitContainer1);
+            this.Name = "LocalFeatureSourcePreviewCtrl";
+            this.Size = new System.Drawing.Size(535, 377);
+            this.splitContainer1.Panel1.ResumeLayout(false);
+            this.splitContainer1.Panel1.PerformLayout();
+            this.splitContainer1.Panel2.ResumeLayout(false);
+            this.splitContainer1.ResumeLayout(false);
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.SplitContainer splitContainer1;
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.ToolStripButton btnRefresh;
+        private System.Windows.Forms.ToolStripButton btnSql;
+        private System.Windows.Forms.ToolStripButton btnStandard;
+        private System.Windows.Forms.TabControl tabPreviews;
+        private System.Windows.Forms.TreeView trvSchema;
+        private System.Windows.Forms.ImageList schemaImageList;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/LocalFeatureSourcePreviewCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/LocalFeatureSourcePreviewCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/LocalFeatureSourcePreviewCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.FeatureSource.Preview
+{
+    public partial class LocalFeatureSourcePreviewCtrl : UserControl
+    {
+        public LocalFeatureSourcePreviewCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/LocalFeatureSourcePreviewCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/LocalFeatureSourcePreviewCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/LocalFeatureSourcePreviewCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,190 @@
+<?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="schemaImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>116, 17</value>
+  </metadata>
+  <data name="schemaImageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAy
+        DQAAAk1TRnQBSQFMAgEBBgEAAQkBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
+        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
+        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
+        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
+        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
+        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
+        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
+        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
+        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
+        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
+        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
+        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
+        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
+        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
+        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
+        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
+        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
+        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
+        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
+        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
+        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
+        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
+        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
+        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
+        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
+        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/0EAA8cKoQPHEKEgAAHH
+        Ad0MxwHdAccQBCAAAscBrQq1Aa0CxwGmAfUM9AH1AaYhAAHHAbUKzwG1AccBAAGmAfQDiwGtBLQBugPc
+        AfQBpiEAAccBtQrPAbUBxwEAAYYB9AOLAa0DtAG7AQkB3AIZAfQBhiEAAccB1gG0Cc8BtQHHAQABhgH0
+        AWUBawNsAYsDkQG0AbsBCQH0AYYhAAHHAdYBtQG0CM8BtQHHAQABhgH1AkkBbAGSAbsBvAIZA/QC9QGG
+        IQABxwEJAtYBtQG0Bs8BtAHHAQABhgH1AnEBuwUZAfQBGQL0AfUBhiEAAccBCQTWArUEzwG1AccBAAGG
+        AfUBuwEJA90BGQHdAgkCGQH0AfUBhiEAAccBCQrWAQkBxwEAAYYB/wLVAdsB3AHbBNwBCQIZAf8BhiEA
+        AccBCQrWAQkBxwEAAYYB/wfUAtUB3AEJAdwB/wGGIAACxwHPCt0BzwLHAacO/wGnIAABxwHdDMcB3QHH
+        EKcgAAPHCgADx3AAD6EBABChAQQMXwEEAqEDAAOhAQQBQwEEAYUDoQMAAaYFrQGmAaEBpgWtAaYBABEE
+        AfMK8gHzAQQCoQMAA6EBFQGZARUBhQOhAwABrQX0Aa0BAAGtBfQBrQEAAQQB9Qz0AfUCBAHzCvIB8wEE
+        CAABFQGZAXkBFQYAAa0F/wGtAQABrQX/Aa0BAAGmAfQC2gHcAvAEvAPuAfQBpgGGAfMB1QHyAQcB7wIH
+        Ae8BBwG8AfIB8wGGCAABFAGZARQBhQYAAa0B2wHVArQBswGsAQABrQHbAdUCtAGzAawBAAGmAfQB2gHh
+        AdwC9AG8AvQBvAL0Ae4B9AGmAYYB9ArzAfQBhggAAUQBmQF5AUQGAAGtAdsB3ALbAdoBrQEAAa0B2wHc
+        AtsB2gGtAQABhgH0AtoB3APwArwB8APuAfQChgH0AW8B8wgHAfQBhggAAUQBmQFEAYUGAAHHBa0BxwEA
+        AccFrQHHAQABhgH0AdoB4QHcAvQBvAL0AbwC9AHuAfQChgz0AYYIAAFEAZkBeQFECQABBAcAAQQEAAGG
+        AfUC2gHcA/ACvAHwA+4B9QKGAf8BTwH/AQcBvAHwAfEF/wGGBgABoQGiARQBmQF5ARQBogGhBwAJhQQA
+        AYYB9QHaAeEB3AL1AbwC9QG8AvUB7gH1AoYH/wGZAUsBHAK8AYYFAAGhAWYBbgGZAXkCdAFuAWYBoQoA
+        AYYIAAGGAfUC2gHcA/ACvAHwA+4B9QKGAv8B7gFLAe4B/wGZAUsBmQFLARwBvAGGBQABhgFzApoBeQJS
+        AXoBbgGGBwABxwWtAccFAAGGAfUB2gHhAdwC/wG8Av8BvAL/Ae4B9QKGAgcBSwGaAUsBbgFLAZoBSwGa
+        AksBQwGhBAABZgOaAZkCeQJ6AWYHAAGtBfQBrQUAAYYB/wLaAdsC3AK7BboB/wKGAbUB8QGZAXQBmgFL
+        AZoBSwGaAXQBmgF0AUsBRAGGAwABZwGaBksBegFnBwABrQX/Aa0FAAGGAf8B2gHhAdoC4QHaAtsB2gLb
+        AdoB/wGGAaEDhgFmAUsBmgF0AZoBdAGaAZkBdAF5AXQBRAMAAWYBmQF0ARICoQESAVEBeQFmBwABrQHb
+        AdUCtAGzAawFAAGGAf8M2gH/AYYEAAGGAWcBdAGaAXQCmgJ0AZkBmgFnAwABogFtAZoBcwJKAUsBegFt
+        AaIHAAGtAdsB3ALbAdoBrQUAAacO/wGnBAABZwGaAnQCmgGZA5oBZwGGAwABoQGGAW0BmQGaAZkBdAFt
+        AYYBoQcAAccFrQHHBQAQpwQAAYYJZwGGBQABoQGiAWYCZwFmAaIBoQQAAUIBTQE+BwABPgMAASgDAAFA
+        AwABIAMAAQEBAAEBBgABARYAA/8BAAT/HAABgAEBBgABgAEBBgABgAEBBgABgAEBBgABgAEBBgABgAEB
+        BgABgAEBBgABgAEBFgABHwH4Av8EAAT/BQABAQQAAeABBwEAAQEEAAHgAQcCAQMAAQMB/AE/AgEDAAED
+        AfwBPwIBAwABAwH8AT8CAQMAAQMB/AE/AgEDAAEDAfwBPwLvAwABAwHwAQ8B4AEPAwABAwHgAQcB/gH/
+        AwABAwHgAQcB8AEfAwABAQHgAQcB8AEfBAAB4AEHAfABHwQAAeABBwHwAR8CAAHwAQAB4AEHAfABHwIA
+        AfABAAHgAQcB8AEfAgAB8AEBAfABDws=
+</value>
+  </data>
+  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/PreviewPane.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/PreviewPane.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/PreviewPane.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,135 @@
+namespace Maestro.Editors.FeatureSource.Preview
+{
+    partial class PreviewPane
+    {
+        /// <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.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.btnRunQuery = new System.Windows.Forms.ToolStripButton();
+            this.btnStop = new System.Windows.Forms.ToolStripButton();
+            this.btnClear = new System.Windows.Forms.ToolStripButton();
+            this.queryPane = new System.Windows.Forms.Panel();
+            this.statusBar = new System.Windows.Forms.StatusStrip();
+            this.grdResults = new System.Windows.Forms.DataGridView();
+            this.toolStrip1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.grdResults)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnRunQuery,
+            this.btnStop,
+            this.btnClear});
+            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Size = new System.Drawing.Size(670, 25);
+            this.toolStrip1.TabIndex = 0;
+            this.toolStrip1.Text = "toolStrip1";
+            // 
+            // btnRunQuery
+            // 
+            this.btnRunQuery.Image = global::Maestro.Editors.Properties.Resources.control;
+            this.btnRunQuery.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnRunQuery.Name = "btnRunQuery";
+            this.btnRunQuery.Size = new System.Drawing.Size(79, 22);
+            this.btnRunQuery.Text = "Run Query";
+            // 
+            // btnStop
+            // 
+            this.btnStop.Image = global::Maestro.Editors.Properties.Resources.control_stop_square;
+            this.btnStop.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnStop.Name = "btnStop";
+            this.btnStop.Size = new System.Drawing.Size(49, 22);
+            this.btnStop.Text = "Stop";
+            // 
+            // btnClear
+            // 
+            this.btnClear.Image = global::Maestro.Editors.Properties.Resources.cross_script;
+            this.btnClear.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnClear.Name = "btnClear";
+            this.btnClear.Size = new System.Drawing.Size(52, 22);
+            this.btnClear.Text = "Clear";
+            // 
+            // queryPane
+            // 
+            this.queryPane.Dock = System.Windows.Forms.DockStyle.Top;
+            this.queryPane.Location = new System.Drawing.Point(0, 25);
+            this.queryPane.Name = "queryPane";
+            this.queryPane.Size = new System.Drawing.Size(670, 150);
+            this.queryPane.TabIndex = 1;
+            // 
+            // statusBar
+            // 
+            this.statusBar.Location = new System.Drawing.Point(0, 453);
+            this.statusBar.Name = "statusBar";
+            this.statusBar.Size = new System.Drawing.Size(670, 22);
+            this.statusBar.TabIndex = 2;
+            this.statusBar.Text = "statusStrip1";
+            // 
+            // grdResults
+            // 
+            this.grdResults.AllowUserToAddRows = false;
+            this.grdResults.AllowUserToDeleteRows = false;
+            this.grdResults.AllowUserToOrderColumns = true;
+            this.grdResults.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.grdResults.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.grdResults.Location = new System.Drawing.Point(0, 175);
+            this.grdResults.Name = "grdResults";
+            this.grdResults.ReadOnly = true;
+            this.grdResults.Size = new System.Drawing.Size(670, 278);
+            this.grdResults.TabIndex = 3;
+            // 
+            // PreviewPane
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.grdResults);
+            this.Controls.Add(this.statusBar);
+            this.Controls.Add(this.queryPane);
+            this.Controls.Add(this.toolStrip1);
+            this.Name = "PreviewPane";
+            this.Size = new System.Drawing.Size(670, 475);
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.grdResults)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.Panel queryPane;
+        private System.Windows.Forms.StatusStrip statusBar;
+        private System.Windows.Forms.DataGridView grdResults;
+        private System.Windows.Forms.ToolStripButton btnRunQuery;
+        private System.Windows.Forms.ToolStripButton btnStop;
+        private System.Windows.Forms.ToolStripButton btnClear;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/PreviewPane.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/PreviewPane.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/PreviewPane.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.FeatureSource.Preview
+{
+    public partial class PreviewPane : UserControl
+    {
+        public PreviewPane()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/PreviewPane.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/PreviewPane.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/PreviewPane.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,126 @@
+<?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="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="statusBar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>116, 17</value>
+  </metadata>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/SqlQueryCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/SqlQueryCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/SqlQueryCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,59 @@
+namespace Maestro.Editors.FeatureSource.Preview
+{
+    partial class SqlQueryCtrl
+    {
+        /// <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.txtSql = new System.Windows.Forms.TextBox();
+            this.SuspendLayout();
+            // 
+            // txtSql
+            // 
+            this.txtSql.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.txtSql.Location = new System.Drawing.Point(0, 0);
+            this.txtSql.Multiline = true;
+            this.txtSql.Name = "txtSql";
+            this.txtSql.Size = new System.Drawing.Size(602, 152);
+            this.txtSql.TabIndex = 0;
+            // 
+            // SqlQueryCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.txtSql);
+            this.Name = "SqlQueryCtrl";
+            this.Size = new System.Drawing.Size(602, 152);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.TextBox txtSql;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/SqlQueryCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/SqlQueryCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/SqlQueryCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.FeatureSource.Preview
+{
+    public partial class SqlQueryCtrl : UserControl
+    {
+        public SqlQueryCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/SqlQueryCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/SqlQueryCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/SqlQueryCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/StandardQueryCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/StandardQueryCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/StandardQueryCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,221 @@
+namespace Maestro.Editors.FeatureSource.Preview
+{
+    partial class StandardQueryCtrl
+    {
+        /// <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.tabProperties = new System.Windows.Forms.TabControl();
+            this.TAB_SELECTED = new System.Windows.Forms.TabPage();
+            this.btnCheckNone = new System.Windows.Forms.Button();
+            this.btnCheckAll = new System.Windows.Forms.Button();
+            this.chkProperties = new System.Windows.Forms.CheckedListBox();
+            this.TAB_COMPUTED = new System.Windows.Forms.TabPage();
+            this.btnDelete = new System.Windows.Forms.Button();
+            this.btnAdd = new System.Windows.Forms.Button();
+            this.grdExpressions = new System.Windows.Forms.DataGridView();
+            this.COL_ALIAS = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.COL_EXPR = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.txtFilter = new System.Windows.Forms.TextBox();
+            this.lblFilter = new System.Windows.Forms.Label();
+            this.tabProperties.SuspendLayout();
+            this.TAB_SELECTED.SuspendLayout();
+            this.TAB_COMPUTED.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.grdExpressions)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // tabProperties
+            // 
+            this.tabProperties.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.tabProperties.Appearance = System.Windows.Forms.TabAppearance.FlatButtons;
+            this.tabProperties.Controls.Add(this.TAB_SELECTED);
+            this.tabProperties.Controls.Add(this.TAB_COMPUTED);
+            this.tabProperties.Location = new System.Drawing.Point(171, 9);
+            this.tabProperties.Name = "tabProperties";
+            this.tabProperties.SelectedIndex = 0;
+            this.tabProperties.Size = new System.Drawing.Size(313, 165);
+            this.tabProperties.TabIndex = 11;
+            // 
+            // TAB_SELECTED
+            // 
+            this.TAB_SELECTED.Controls.Add(this.btnCheckNone);
+            this.TAB_SELECTED.Controls.Add(this.btnCheckAll);
+            this.TAB_SELECTED.Controls.Add(this.chkProperties);
+            this.TAB_SELECTED.Location = new System.Drawing.Point(4, 25);
+            this.TAB_SELECTED.Name = "TAB_SELECTED";
+            this.TAB_SELECTED.Padding = new System.Windows.Forms.Padding(3);
+            this.TAB_SELECTED.Size = new System.Drawing.Size(305, 136);
+            this.TAB_SELECTED.TabIndex = 0;
+            this.TAB_SELECTED.Text = "Selected Properties";
+            this.TAB_SELECTED.UseVisualStyleBackColor = true;
+            // 
+            // btnCheckNone
+            // 
+            this.btnCheckNone.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.btnCheckNone.Location = new System.Drawing.Point(89, 106);
+            this.btnCheckNone.Name = "btnCheckNone";
+            this.btnCheckNone.Size = new System.Drawing.Size(75, 23);
+            this.btnCheckNone.TabIndex = 2;
+            this.btnCheckNone.Text = "Check None";
+            this.btnCheckNone.UseVisualStyleBackColor = true;
+            // 
+            // btnCheckAll
+            // 
+            this.btnCheckAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.btnCheckAll.Location = new System.Drawing.Point(7, 106);
+            this.btnCheckAll.Name = "btnCheckAll";
+            this.btnCheckAll.Size = new System.Drawing.Size(75, 23);
+            this.btnCheckAll.TabIndex = 1;
+            this.btnCheckAll.Text = "Check All";
+            this.btnCheckAll.UseVisualStyleBackColor = true;
+            // 
+            // chkProperties
+            // 
+            this.chkProperties.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.chkProperties.FormattingEnabled = true;
+            this.chkProperties.Location = new System.Drawing.Point(0, 0);
+            this.chkProperties.Name = "chkProperties";
+            this.chkProperties.Size = new System.Drawing.Size(305, 94);
+            this.chkProperties.TabIndex = 0;
+            // 
+            // TAB_COMPUTED
+            // 
+            this.TAB_COMPUTED.Controls.Add(this.btnDelete);
+            this.TAB_COMPUTED.Controls.Add(this.btnAdd);
+            this.TAB_COMPUTED.Controls.Add(this.grdExpressions);
+            this.TAB_COMPUTED.Location = new System.Drawing.Point(4, 25);
+            this.TAB_COMPUTED.Name = "TAB_COMPUTED";
+            this.TAB_COMPUTED.Padding = new System.Windows.Forms.Padding(3);
+            this.TAB_COMPUTED.Size = new System.Drawing.Size(318, 136);
+            this.TAB_COMPUTED.TabIndex = 1;
+            this.TAB_COMPUTED.Text = "Computed Properties";
+            this.TAB_COMPUTED.UseVisualStyleBackColor = true;
+            // 
+            // btnDelete
+            // 
+            this.btnDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.btnDelete.Location = new System.Drawing.Point(88, 107);
+            this.btnDelete.Name = "btnDelete";
+            this.btnDelete.Size = new System.Drawing.Size(75, 23);
+            this.btnDelete.TabIndex = 2;
+            this.btnDelete.Text = "Delete";
+            this.btnDelete.UseVisualStyleBackColor = true;
+            // 
+            // btnAdd
+            // 
+            this.btnAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.btnAdd.Location = new System.Drawing.Point(6, 107);
+            this.btnAdd.Name = "btnAdd";
+            this.btnAdd.Size = new System.Drawing.Size(75, 23);
+            this.btnAdd.TabIndex = 1;
+            this.btnAdd.Text = "Add";
+            this.btnAdd.UseVisualStyleBackColor = true;
+            // 
+            // grdExpressions
+            // 
+            this.grdExpressions.AllowUserToAddRows = false;
+            this.grdExpressions.AllowUserToDeleteRows = false;
+            this.grdExpressions.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.grdExpressions.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.grdExpressions.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+            this.COL_ALIAS,
+            this.COL_EXPR});
+            this.grdExpressions.Location = new System.Drawing.Point(0, 0);
+            this.grdExpressions.Name = "grdExpressions";
+            this.grdExpressions.Size = new System.Drawing.Size(318, 100);
+            this.grdExpressions.TabIndex = 0;
+            // 
+            // COL_ALIAS
+            // 
+            this.COL_ALIAS.HeaderText = "Alias";
+            this.COL_ALIAS.Name = "COL_ALIAS";
+            // 
+            // COL_EXPR
+            // 
+            this.COL_EXPR.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
+            this.COL_EXPR.HeaderText = "Expression";
+            this.COL_EXPR.Name = "COL_EXPR";
+            // 
+            // txtFilter
+            // 
+            this.txtFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)));
+            this.txtFilter.Location = new System.Drawing.Point(12, 25);
+            this.txtFilter.Multiline = true;
+            this.txtFilter.Name = "txtFilter";
+            this.txtFilter.Size = new System.Drawing.Size(153, 139);
+            this.txtFilter.TabIndex = 10;
+            // 
+            // lblFilter
+            // 
+            this.lblFilter.AutoSize = true;
+            this.lblFilter.Location = new System.Drawing.Point(9, 9);
+            this.lblFilter.Name = "lblFilter";
+            this.lblFilter.Size = new System.Drawing.Size(29, 13);
+            this.lblFilter.TabIndex = 9;
+            this.lblFilter.Text = "Filter";
+            // 
+            // StandardQueryCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.tabProperties);
+            this.Controls.Add(this.txtFilter);
+            this.Controls.Add(this.lblFilter);
+            this.Name = "StandardQueryCtrl";
+            this.Size = new System.Drawing.Size(498, 183);
+            this.tabProperties.ResumeLayout(false);
+            this.TAB_SELECTED.ResumeLayout(false);
+            this.TAB_COMPUTED.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.grdExpressions)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.TabControl tabProperties;
+        private System.Windows.Forms.TabPage TAB_SELECTED;
+        private System.Windows.Forms.Button btnCheckNone;
+        private System.Windows.Forms.Button btnCheckAll;
+        private System.Windows.Forms.CheckedListBox chkProperties;
+        private System.Windows.Forms.TabPage TAB_COMPUTED;
+        private System.Windows.Forms.Button btnDelete;
+        private System.Windows.Forms.Button btnAdd;
+        private System.Windows.Forms.DataGridView grdExpressions;
+        private System.Windows.Forms.DataGridViewTextBoxColumn COL_ALIAS;
+        private System.Windows.Forms.DataGridViewTextBoxColumn COL_EXPR;
+        private System.Windows.Forms.TextBox txtFilter;
+        private System.Windows.Forms.Label lblFilter;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/StandardQueryCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/StandardQueryCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/StandardQueryCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.FeatureSource.Preview
+{
+    public partial class StandardQueryCtrl : UserControl
+    {
+        public StandardQueryCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/StandardQueryCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/StandardQueryCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/FeatureSource/Preview/StandardQueryCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,126 @@
+<?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="COL_ALIAS.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="COL_EXPR.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/LayerPropertiesSectionCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/LayerPropertiesSectionCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/LayerPropertiesSectionCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,176 @@
+namespace Maestro.Editors.LayerDefinition
+{
+    partial class LayerPropertiesSectionCtrl
+    {
+        /// <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.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.btnCheckAll = new System.Windows.Forms.ToolStripButton();
+            this.btnUncheckAll = new System.Windows.Forms.ToolStripButton();
+            this.btnInvert = new System.Windows.Forms.ToolStripButton();
+            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+            this.btnMoveUp = new System.Windows.Forms.ToolStripButton();
+            this.btnMoveDown = new System.Windows.Forms.ToolStripButton();
+            this.grdProperties = new System.Windows.Forms.DataGridView();
+            this.COL_VISIBLE = new System.Windows.Forms.DataGridViewCheckBoxColumn();
+            this.COL_NAME = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.COL_DISPLAY = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.contentPanel.SuspendLayout();
+            this.toolStrip1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.grdProperties)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // contentPanel
+            // 
+            this.contentPanel.Controls.Add(this.grdProperties);
+            this.contentPanel.Controls.Add(this.toolStrip1);
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnCheckAll,
+            this.btnUncheckAll,
+            this.btnInvert,
+            this.toolStripSeparator1,
+            this.btnMoveUp,
+            this.btnMoveDown});
+            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Size = new System.Drawing.Size(449, 25);
+            this.toolStrip1.TabIndex = 1;
+            this.toolStrip1.Text = "toolStrip1";
+            // 
+            // btnCheckAll
+            // 
+            this.btnCheckAll.Image = global::Maestro.Editors.Properties.Resources.tick;
+            this.btnCheckAll.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnCheckAll.Name = "btnCheckAll";
+            this.btnCheckAll.Size = new System.Drawing.Size(70, 22);
+            this.btnCheckAll.Text = "Check All";
+            // 
+            // btnUncheckAll
+            // 
+            this.btnUncheckAll.Image = global::Maestro.Editors.Properties.Resources.cross;
+            this.btnUncheckAll.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnUncheckAll.Name = "btnUncheckAll";
+            this.btnUncheckAll.Size = new System.Drawing.Size(81, 22);
+            this.btnUncheckAll.Text = "Uncheck All";
+            // 
+            // btnInvert
+            // 
+            this.btnInvert.Image = global::Maestro.Editors.Properties.Resources.arrow_return_180;
+            this.btnInvert.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnInvert.Name = "btnInvert";
+            this.btnInvert.Size = new System.Drawing.Size(57, 22);
+            this.btnInvert.Text = "Invert";
+            this.btnInvert.ToolTipText = "Invert the checked/unchecked state of all properties";
+            // 
+            // toolStripSeparator1
+            // 
+            this.toolStripSeparator1.Name = "toolStripSeparator1";
+            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
+            // 
+            // btnMoveUp
+            // 
+            this.btnMoveUp.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            this.btnMoveUp.Image = global::Maestro.Editors.Properties.Resources.arrow_090;
+            this.btnMoveUp.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnMoveUp.Name = "btnMoveUp";
+            this.btnMoveUp.Size = new System.Drawing.Size(23, 22);
+            this.btnMoveUp.Text = "toolStripButton1";
+            // 
+            // btnMoveDown
+            // 
+            this.btnMoveDown.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            this.btnMoveDown.Image = global::Maestro.Editors.Properties.Resources.arrow_270;
+            this.btnMoveDown.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnMoveDown.Name = "btnMoveDown";
+            this.btnMoveDown.Size = new System.Drawing.Size(23, 22);
+            this.btnMoveDown.Text = "toolStripButton2";
+            // 
+            // grdProperties
+            // 
+            this.grdProperties.AllowUserToAddRows = false;
+            this.grdProperties.AllowUserToDeleteRows = false;
+            this.grdProperties.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.grdProperties.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+            this.COL_VISIBLE,
+            this.COL_NAME,
+            this.COL_DISPLAY});
+            this.grdProperties.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.grdProperties.Location = new System.Drawing.Point(0, 25);
+            this.grdProperties.Name = "grdProperties";
+            this.grdProperties.Size = new System.Drawing.Size(449, 267);
+            this.grdProperties.TabIndex = 2;
+            // 
+            // COL_VISIBLE
+            // 
+            this.COL_VISIBLE.HeaderText = "Visible";
+            this.COL_VISIBLE.Name = "COL_VISIBLE";
+            // 
+            // COL_NAME
+            // 
+            this.COL_NAME.HeaderText = "Name";
+            this.COL_NAME.Name = "COL_NAME";
+            this.COL_NAME.ReadOnly = true;
+            // 
+            // COL_DISPLAY
+            // 
+            this.COL_DISPLAY.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
+            this.COL_DISPLAY.HeaderText = "Display Name";
+            this.COL_DISPLAY.Name = "COL_DISPLAY";
+            // 
+            // LayerPropertiesSectionCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.HeaderText = "Layer Properties Visible in Viewer";
+            this.Name = "LayerPropertiesSectionCtrl";
+            this.contentPanel.ResumeLayout(false);
+            this.contentPanel.PerformLayout();
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.grdProperties)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.ToolStripButton btnCheckAll;
+        private System.Windows.Forms.ToolStripButton btnUncheckAll;
+        private System.Windows.Forms.ToolStripButton btnInvert;
+        private System.Windows.Forms.DataGridView grdProperties;
+        private System.Windows.Forms.DataGridViewCheckBoxColumn COL_VISIBLE;
+        private System.Windows.Forms.DataGridViewTextBoxColumn COL_NAME;
+        private System.Windows.Forms.DataGridViewTextBoxColumn COL_DISPLAY;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+        private System.Windows.Forms.ToolStripButton btnMoveUp;
+        private System.Windows.Forms.ToolStripButton btnMoveDown;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/LayerPropertiesSectionCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/LayerPropertiesSectionCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/LayerPropertiesSectionCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using Maestro.Shared.UI;
+
+namespace Maestro.Editors.LayerDefinition
+{
+    [ToolboxItem(true)]
+    internal partial class LayerPropertiesSectionCtrl : CollapsiblePanel
+    {
+        public LayerPropertiesSectionCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/LayerPropertiesSectionCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/LayerPropertiesSectionCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/LayerPropertiesSectionCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,141 @@
+<?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="COL_VISIBLE.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="COL_NAME.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="COL_DISPLAY.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="COL_VISIBLE.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="COL_NAME.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="COL_DISPLAY.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ConditionCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ConditionCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ConditionCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,113 @@
+namespace Maestro.Editors.LayerDefinition.Scales
+{
+    partial class ConditionCtrl
+    {
+        /// <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.DeleteButton = new System.Windows.Forms.Button();
+            this.EditFilter = new System.Windows.Forms.Button();
+            this.LegendLabel = new System.Windows.Forms.TextBox();
+            this.RuleCondition = new System.Windows.Forms.TextBox();
+            this.itemStyleCtrl1 = new Maestro.Editors.LayerDefinition.Scales.ItemStyleCtrl();
+            this.itemStyleCtrl2 = new Maestro.Editors.LayerDefinition.Scales.ItemStyleCtrl();
+            this.SuspendLayout();
+            // 
+            // DeleteButton
+            // 
+            this.DeleteButton.Image = global::Maestro.Editors.Properties.Resources.cross_script;
+            this.DeleteButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.DeleteButton.Location = new System.Drawing.Point(1, 1);
+            this.DeleteButton.Name = "DeleteButton";
+            this.DeleteButton.Size = new System.Drawing.Size(32, 20);
+            this.DeleteButton.TabIndex = 11;
+            this.DeleteButton.UseVisualStyleBackColor = true;
+            // 
+            // EditFilter
+            // 
+            this.EditFilter.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.EditFilter.Location = new System.Drawing.Point(143, 1);
+            this.EditFilter.Name = "EditFilter";
+            this.EditFilter.Size = new System.Drawing.Size(24, 20);
+            this.EditFilter.TabIndex = 10;
+            this.EditFilter.Text = "...";
+            this.EditFilter.UseVisualStyleBackColor = true;
+            // 
+            // LegendLabel
+            // 
+            this.LegendLabel.Location = new System.Drawing.Point(169, 1);
+            this.LegendLabel.Name = "LegendLabel";
+            this.LegendLabel.Size = new System.Drawing.Size(134, 20);
+            this.LegendLabel.TabIndex = 9;
+            // 
+            // RuleCondition
+            // 
+            this.RuleCondition.Location = new System.Drawing.Point(33, 1);
+            this.RuleCondition.Name = "RuleCondition";
+            this.RuleCondition.Size = new System.Drawing.Size(110, 20);
+            this.RuleCondition.TabIndex = 8;
+            // 
+            // itemStyleCtrl1
+            // 
+            this.itemStyleCtrl1.Location = new System.Drawing.Point(305, 1);
+            this.itemStyleCtrl1.Name = "itemStyleCtrl1";
+            this.itemStyleCtrl1.Size = new System.Drawing.Size(134, 20);
+            this.itemStyleCtrl1.TabIndex = 12;
+            // 
+            // itemStyleCtrl2
+            // 
+            this.itemStyleCtrl2.Location = new System.Drawing.Point(444, 1);
+            this.itemStyleCtrl2.Name = "itemStyleCtrl2";
+            this.itemStyleCtrl2.Size = new System.Drawing.Size(134, 20);
+            this.itemStyleCtrl2.TabIndex = 13;
+            // 
+            // ConditionCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.itemStyleCtrl2);
+            this.Controls.Add(this.itemStyleCtrl1);
+            this.Controls.Add(this.DeleteButton);
+            this.Controls.Add(this.EditFilter);
+            this.Controls.Add(this.LegendLabel);
+            this.Controls.Add(this.RuleCondition);
+            this.Name = "ConditionCtrl";
+            this.Size = new System.Drawing.Size(577, 23);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Button DeleteButton;
+        private System.Windows.Forms.Button EditFilter;
+        private System.Windows.Forms.TextBox LegendLabel;
+        private System.Windows.Forms.TextBox RuleCondition;
+        private ItemStyleCtrl itemStyleCtrl1;
+        private ItemStyleCtrl itemStyleCtrl2;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ConditionCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ConditionCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ConditionCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.LayerDefinition.Scales
+{
+    public partial class ConditionCtrl : UserControl
+    {
+        public ConditionCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ConditionCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ConditionCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ConditionCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ItemStyleCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ItemStyleCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ItemStyleCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,77 @@
+namespace Maestro.Editors.LayerDefinition.Scales
+{
+    partial class ItemStyleCtrl
+    {
+        /// <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.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;
+            this.previewPicture.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.previewPicture.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.previewPicture.Location = new System.Drawing.Point(0, 0);
+            this.previewPicture.Name = "previewPicture";
+            this.previewPicture.Size = new System.Drawing.Size(113, 20);
+            this.previewPicture.TabIndex = 2;
+            this.previewPicture.TabStop = false;
+            // 
+            // EditButton
+            // 
+            this.EditButton.Dock = System.Windows.Forms.DockStyle.Right;
+            this.EditButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.EditButton.Location = new System.Drawing.Point(113, 0);
+            this.EditButton.Name = "EditButton";
+            this.EditButton.Size = new System.Drawing.Size(24, 20);
+            this.EditButton.TabIndex = 3;
+            this.EditButton.Text = "...";
+            this.EditButton.UseVisualStyleBackColor = true;
+            // 
+            // ItemStyleCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.previewPicture);
+            this.Controls.Add(this.EditButton);
+            this.Name = "ItemStyleCtrl";
+            this.Size = new System.Drawing.Size(137, 20);
+            ((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-2.5/Maestro.Editors/LayerDefinition/Scales/ItemStyleCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ItemStyleCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ItemStyleCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.LayerDefinition.Scales
+{
+    public partial class ItemStyleCtrl : UserControl
+    {
+        public ItemStyleCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ItemStyleCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ItemStyleCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ItemStyleCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeConditionsCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeConditionsCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeConditionsCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,160 @@
+namespace Maestro.Editors.LayerDefinition.Scales
+{
+    partial class ScaleRangeConditionsCtrl
+    {
+        /// <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.DisplayPoints = new System.Windows.Forms.CheckBox();
+            this.scaleRangeGeometryStyleCtrl1 = new Maestro.Editors.LayerDefinition.Scales.ScaleRangeGeometryStyleCtrl();
+            this.DisplayLines = new System.Windows.Forms.CheckBox();
+            this.splitter1 = new System.Windows.Forms.Splitter();
+            this.scaleRangeGeometryStyleCtrl2 = new Maestro.Editors.LayerDefinition.Scales.ScaleRangeGeometryStyleCtrl();
+            this.DisplayAreas = new System.Windows.Forms.CheckBox();
+            this.splitter2 = new System.Windows.Forms.Splitter();
+            this.scaleRangeGeometryStyleCtrl3 = new Maestro.Editors.LayerDefinition.Scales.ScaleRangeGeometryStyleCtrl();
+            this.SuspendLayout();
+            // 
+            // DisplayPoints
+            // 
+            this.DisplayPoints.AutoSize = true;
+            this.DisplayPoints.BackColor = System.Drawing.Color.LightSkyBlue;
+            this.DisplayPoints.Checked = true;
+            this.DisplayPoints.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.DisplayPoints.Dock = System.Windows.Forms.DockStyle.Top;
+            this.DisplayPoints.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.DisplayPoints.Location = new System.Drawing.Point(0, 0);
+            this.DisplayPoints.Name = "DisplayPoints";
+            this.DisplayPoints.Size = new System.Drawing.Size(597, 17);
+            this.DisplayPoints.TabIndex = 14;
+            this.DisplayPoints.Text = "Display points";
+            this.DisplayPoints.UseVisualStyleBackColor = false;
+            // 
+            // scaleRangeGeometryStyleCtrl1
+            // 
+            this.scaleRangeGeometryStyleCtrl1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.scaleRangeGeometryStyleCtrl1.Location = new System.Drawing.Point(0, 17);
+            this.scaleRangeGeometryStyleCtrl1.Name = "scaleRangeGeometryStyleCtrl1";
+            this.scaleRangeGeometryStyleCtrl1.Size = new System.Drawing.Size(597, 88);
+            this.scaleRangeGeometryStyleCtrl1.TabIndex = 15;
+            // 
+            // DisplayLines
+            // 
+            this.DisplayLines.AutoSize = true;
+            this.DisplayLines.BackColor = System.Drawing.Color.LightSkyBlue;
+            this.DisplayLines.Checked = true;
+            this.DisplayLines.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.DisplayLines.Dock = System.Windows.Forms.DockStyle.Top;
+            this.DisplayLines.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.DisplayLines.Location = new System.Drawing.Point(0, 113);
+            this.DisplayLines.Name = "DisplayLines";
+            this.DisplayLines.Size = new System.Drawing.Size(597, 17);
+            this.DisplayLines.TabIndex = 16;
+            this.DisplayLines.Text = "Display lines";
+            this.DisplayLines.UseVisualStyleBackColor = false;
+            // 
+            // splitter1
+            // 
+            this.splitter1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.splitter1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.splitter1.Location = new System.Drawing.Point(0, 105);
+            this.splitter1.Name = "splitter1";
+            this.splitter1.Size = new System.Drawing.Size(597, 8);
+            this.splitter1.TabIndex = 17;
+            this.splitter1.TabStop = false;
+            // 
+            // scaleRangeGeometryStyleCtrl2
+            // 
+            this.scaleRangeGeometryStyleCtrl2.Dock = System.Windows.Forms.DockStyle.Top;
+            this.scaleRangeGeometryStyleCtrl2.Location = new System.Drawing.Point(0, 130);
+            this.scaleRangeGeometryStyleCtrl2.Name = "scaleRangeGeometryStyleCtrl2";
+            this.scaleRangeGeometryStyleCtrl2.Size = new System.Drawing.Size(597, 97);
+            this.scaleRangeGeometryStyleCtrl2.TabIndex = 18;
+            // 
+            // DisplayAreas
+            // 
+            this.DisplayAreas.AutoSize = true;
+            this.DisplayAreas.BackColor = System.Drawing.Color.LightSkyBlue;
+            this.DisplayAreas.Checked = true;
+            this.DisplayAreas.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.DisplayAreas.Dock = System.Windows.Forms.DockStyle.Top;
+            this.DisplayAreas.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.DisplayAreas.Location = new System.Drawing.Point(0, 235);
+            this.DisplayAreas.Name = "DisplayAreas";
+            this.DisplayAreas.Size = new System.Drawing.Size(597, 17);
+            this.DisplayAreas.TabIndex = 19;
+            this.DisplayAreas.Text = "Display areas";
+            this.DisplayAreas.UseVisualStyleBackColor = false;
+            // 
+            // splitter2
+            // 
+            this.splitter2.Dock = System.Windows.Forms.DockStyle.Top;
+            this.splitter2.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.splitter2.Location = new System.Drawing.Point(0, 227);
+            this.splitter2.Name = "splitter2";
+            this.splitter2.Size = new System.Drawing.Size(597, 8);
+            this.splitter2.TabIndex = 20;
+            this.splitter2.TabStop = false;
+            // 
+            // scaleRangeGeometryStyleCtrl3
+            // 
+            this.scaleRangeGeometryStyleCtrl3.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.scaleRangeGeometryStyleCtrl3.Location = new System.Drawing.Point(0, 252);
+            this.scaleRangeGeometryStyleCtrl3.Name = "scaleRangeGeometryStyleCtrl3";
+            this.scaleRangeGeometryStyleCtrl3.Size = new System.Drawing.Size(597, 82);
+            this.scaleRangeGeometryStyleCtrl3.TabIndex = 21;
+            // 
+            // ScaleRangeConditionsCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.scaleRangeGeometryStyleCtrl3);
+            this.Controls.Add(this.DisplayAreas);
+            this.Controls.Add(this.splitter2);
+            this.Controls.Add(this.scaleRangeGeometryStyleCtrl2);
+            this.Controls.Add(this.DisplayLines);
+            this.Controls.Add(this.splitter1);
+            this.Controls.Add(this.scaleRangeGeometryStyleCtrl1);
+            this.Controls.Add(this.DisplayPoints);
+            this.Name = "ScaleRangeConditionsCtrl";
+            this.Size = new System.Drawing.Size(597, 334);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.CheckBox DisplayPoints;
+        private ScaleRangeGeometryStyleCtrl scaleRangeGeometryStyleCtrl1;
+        private System.Windows.Forms.CheckBox DisplayLines;
+        private System.Windows.Forms.Splitter splitter1;
+        private ScaleRangeGeometryStyleCtrl scaleRangeGeometryStyleCtrl2;
+        private System.Windows.Forms.CheckBox DisplayAreas;
+        private System.Windows.Forms.Splitter splitter2;
+        private ScaleRangeGeometryStyleCtrl scaleRangeGeometryStyleCtrl3;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeConditionsCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeConditionsCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeConditionsCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.LayerDefinition.Scales
+{
+    public partial class ScaleRangeConditionsCtrl : UserControl
+    {
+        public ScaleRangeConditionsCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeConditionsCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeConditionsCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeConditionsCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,96 @@
+namespace Maestro.Editors.LayerDefinition.Scales
+{
+    partial class ScaleRangeCtrl
+    {
+        /// <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.panel1 = new System.Windows.Forms.Panel();
+            this.MinScale = new System.Windows.Forms.ComboBox();
+            this.MaxScale = new System.Windows.Forms.ComboBox();
+            this.scaleRangeConditionsCtrl1 = new Maestro.Editors.LayerDefinition.Scales.ScaleRangeConditionsCtrl();
+            this.panel1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this.MinScale);
+            this.panel1.Controls.Add(this.MaxScale);
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Left;
+            this.panel1.Location = new System.Drawing.Point(0, 0);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(160, 341);
+            this.panel1.TabIndex = 4;
+            // 
+            // MinScale
+            // 
+            this.MinScale.FormattingEnabled = true;
+            this.MinScale.Items.AddRange(new object[] {
+            "infinite"});
+            this.MinScale.Location = new System.Drawing.Point(0, 0);
+            this.MinScale.Name = "MinScale";
+            this.MinScale.Size = new System.Drawing.Size(80, 21);
+            this.MinScale.TabIndex = 1;
+            // 
+            // MaxScale
+            // 
+            this.MaxScale.FormattingEnabled = true;
+            this.MaxScale.Items.AddRange(new object[] {
+            "infinite"});
+            this.MaxScale.Location = new System.Drawing.Point(80, 0);
+            this.MaxScale.Name = "MaxScale";
+            this.MaxScale.Size = new System.Drawing.Size(80, 21);
+            this.MaxScale.TabIndex = 2;
+            // 
+            // scaleRangeConditionsCtrl1
+            // 
+            this.scaleRangeConditionsCtrl1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.scaleRangeConditionsCtrl1.Location = new System.Drawing.Point(160, 0);
+            this.scaleRangeConditionsCtrl1.Name = "scaleRangeConditionsCtrl1";
+            this.scaleRangeConditionsCtrl1.Size = new System.Drawing.Size(593, 341);
+            this.scaleRangeConditionsCtrl1.TabIndex = 5;
+            // 
+            // ScaleRangeCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.scaleRangeConditionsCtrl1);
+            this.Controls.Add(this.panel1);
+            this.Name = "ScaleRangeCtrl";
+            this.Size = new System.Drawing.Size(753, 341);
+            this.panel1.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Panel panel1;
+        private System.Windows.Forms.ComboBox MinScale;
+        private System.Windows.Forms.ComboBox MaxScale;
+        private ScaleRangeConditionsCtrl scaleRangeConditionsCtrl1;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.LayerDefinition.Scales
+{
+    public partial class ScaleRangeCtrl : UserControl
+    {
+        public ScaleRangeCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeGeometryStyleCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeGeometryStyleCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeGeometryStyleCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,195 @@
+namespace Maestro.Editors.LayerDefinition.Scales
+{
+    partial class ScaleRangeGeometryStyleCtrl
+    {
+        /// <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.panel1 = new System.Windows.Forms.Panel();
+            this.ShowInLegend = new System.Windows.Forms.CheckBox();
+            this.MoveRuleUpButton = new System.Windows.Forms.Button();
+            this.MoveRuleDownButton = new System.Windows.Forms.Button();
+            this.CreateThemeButton = new System.Windows.Forms.Button();
+            this.CopyRuleButton = new System.Windows.Forms.Button();
+            this.AddRuleButton = new System.Windows.Forms.Button();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label1 = new System.Windows.Forms.Label();
+            this.ConditionListContainer = new System.Windows.Forms.Panel();
+            this.panel1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // 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);
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.panel1.Location = new System.Drawing.Point(0, 0);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(593, 24);
+            this.panel1.TabIndex = 0;
+            // 
+            // ShowInLegend
+            // 
+            this.ShowInLegend.AutoSize = true;
+            this.ShowInLegend.Checked = true;
+            this.ShowInLegend.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.ShowInLegend.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.ShowInLegend.Location = new System.Drawing.Point(176, 6);
+            this.ShowInLegend.Name = "ShowInLegend";
+            this.ShowInLegend.Size = new System.Drawing.Size(103, 17);
+            this.ShowInLegend.TabIndex = 18;
+            this.ShowInLegend.Text = "Show in Legend";
+            this.ShowInLegend.UseVisualStyleBackColor = true;
+            // 
+            // MoveRuleUpButton
+            // 
+            this.MoveRuleUpButton.Enabled = false;
+            this.MoveRuleUpButton.Image = global::Maestro.Editors.Properties.Resources.arrow_090;
+            this.MoveRuleUpButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.MoveRuleUpButton.Location = new System.Drawing.Point(512, 0);
+            this.MoveRuleUpButton.Name = "MoveRuleUpButton";
+            this.MoveRuleUpButton.Size = new System.Drawing.Size(32, 24);
+            this.MoveRuleUpButton.TabIndex = 17;
+            this.MoveRuleUpButton.UseVisualStyleBackColor = true;
+            // 
+            // MoveRuleDownButton
+            // 
+            this.MoveRuleDownButton.Enabled = false;
+            this.MoveRuleDownButton.Image = global::Maestro.Editors.Properties.Resources.arrow_270;
+            this.MoveRuleDownButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.MoveRuleDownButton.Location = new System.Drawing.Point(544, 0);
+            this.MoveRuleDownButton.Name = "MoveRuleDownButton";
+            this.MoveRuleDownButton.Size = new System.Drawing.Size(32, 24);
+            this.MoveRuleDownButton.TabIndex = 16;
+            this.MoveRuleDownButton.UseVisualStyleBackColor = true;
+            // 
+            // CreateThemeButton
+            // 
+            this.CreateThemeButton.Image = global::Maestro.Editors.Properties.Resources.arrow_270;
+            this.CreateThemeButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.CreateThemeButton.Location = new System.Drawing.Point(104, 0);
+            this.CreateThemeButton.Name = "CreateThemeButton";
+            this.CreateThemeButton.Size = new System.Drawing.Size(32, 24);
+            this.CreateThemeButton.TabIndex = 15;
+            this.CreateThemeButton.UseVisualStyleBackColor = true;
+            // 
+            // CopyRuleButton
+            // 
+            this.CopyRuleButton.Enabled = false;
+            this.CopyRuleButton.Image = global::Maestro.Editors.Properties.Resources.document_copy;
+            this.CopyRuleButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.CopyRuleButton.Location = new System.Drawing.Point(136, 0);
+            this.CopyRuleButton.Name = "CopyRuleButton";
+            this.CopyRuleButton.Size = new System.Drawing.Size(32, 24);
+            this.CopyRuleButton.TabIndex = 14;
+            this.CopyRuleButton.UseVisualStyleBackColor = true;
+            // 
+            // AddRuleButton
+            // 
+            this.AddRuleButton.Image = global::Maestro.Editors.Properties.Resources.plus_circle;
+            this.AddRuleButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.AddRuleButton.Location = new System.Drawing.Point(0, 0);
+            this.AddRuleButton.Name = "AddRuleButton";
+            this.AddRuleButton.Size = new System.Drawing.Size(32, 24);
+            this.AddRuleButton.TabIndex = 13;
+            this.AddRuleButton.UseVisualStyleBackColor = true;
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label4.Location = new System.Drawing.Point(440, 8);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(59, 13);
+            this.label4.TabIndex = 12;
+            this.label4.Text = "Label Style";
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label3.Location = new System.Drawing.Point(306, 7);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(69, 13);
+            this.label3.TabIndex = 11;
+            this.label3.Text = "Feature Style";
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label1.Location = new System.Drawing.Point(32, 8);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(29, 13);
+            this.label1.TabIndex = 10;
+            this.label1.Text = "Rule";
+            // 
+            // ConditionListContainer
+            // 
+            this.ConditionListContainer.AutoScroll = true;
+            this.ConditionListContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.ConditionListContainer.Location = new System.Drawing.Point(0, 24);
+            this.ConditionListContainer.Name = "ConditionListContainer";
+            this.ConditionListContainer.Size = new System.Drawing.Size(593, 73);
+            this.ConditionListContainer.TabIndex = 1;
+            // 
+            // ScaleRangeGeometryStyleCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.ConditionListContainer);
+            this.Controls.Add(this.panel1);
+            this.Name = "ScaleRangeGeometryStyleCtrl";
+            this.Size = new System.Drawing.Size(593, 97);
+            this.panel1.ResumeLayout(false);
+            this.panel1.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Panel panel1;
+        private System.Windows.Forms.CheckBox ShowInLegend;
+        private System.Windows.Forms.Button MoveRuleUpButton;
+        private System.Windows.Forms.Button MoveRuleDownButton;
+        private System.Windows.Forms.Button CreateThemeButton;
+        private System.Windows.Forms.Button CopyRuleButton;
+        private System.Windows.Forms.Button AddRuleButton;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Panel ConditionListContainer;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeGeometryStyleCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeGeometryStyleCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeGeometryStyleCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.LayerDefinition.Scales
+{
+    public partial class ScaleRangeGeometryStyleCtrl : UserControl
+    {
+        public ScaleRangeGeometryStyleCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeGeometryStyleCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeGeometryStyleCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeGeometryStyleCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeListCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeListCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeListCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,111 @@
+namespace Maestro.Editors.LayerDefinition.Scales
+{
+    partial class ScaleRangeListCtrl
+    {
+        /// <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.ControlList = new System.Windows.Forms.Panel();
+            this.headerPanel = 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.headerPanel.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // ControlList
+            // 
+            this.ControlList.AutoScroll = true;
+            this.ControlList.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.ControlList.Location = new System.Drawing.Point(0, 24);
+            this.ControlList.Name = "ControlList";
+            this.ControlList.Size = new System.Drawing.Size(731, 389);
+            this.ControlList.TabIndex = 3;
+            // 
+            // headerPanel
+            // 
+            this.headerPanel.Controls.Add(this.label3);
+            this.headerPanel.Controls.Add(this.label2);
+            this.headerPanel.Controls.Add(this.label1);
+            this.headerPanel.Dock = System.Windows.Forms.DockStyle.Top;
+            this.headerPanel.Location = new System.Drawing.Point(0, 0);
+            this.headerPanel.Name = "headerPanel";
+            this.headerPanel.Size = new System.Drawing.Size(731, 24);
+            this.headerPanel.TabIndex = 2;
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label3.Location = new System.Drawing.Point(160, 8);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(90, 13);
+            this.label3.TabIndex = 2;
+            this.label3.Text = "Display properties";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label2.Location = new System.Drawing.Point(80, 8);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(51, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Maximum";
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label1.Location = new System.Drawing.Point(0, 8);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(48, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Minimum";
+            // 
+            // ScaleRangeListCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.ControlList);
+            this.Controls.Add(this.headerPanel);
+            this.Name = "ScaleRangeListCtrl";
+            this.Size = new System.Drawing.Size(731, 413);
+            this.headerPanel.ResumeLayout(false);
+            this.headerPanel.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Panel ControlList;
+        private System.Windows.Forms.Panel headerPanel;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label1;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeListCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeListCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeListCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.LayerDefinition.Scales
+{
+    internal partial class ScaleRangeListCtrl : UserControl
+    {
+        public ScaleRangeListCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeListCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeListCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Scales/ScaleRangeListCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Thematics/ThemeDialog.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Thematics/ThemeDialog.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Thematics/ThemeDialog.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,463 @@
+namespace Maestro.Editors.LayerDefinition.Thematics
+{
+    partial class ThemeDialog
+    {
+        /// <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()
+        {
+            this.label1 = new System.Windows.Forms.Label();
+            this.btnCancel = new System.Windows.Forms.Button();
+            this.ButtonPanel = new System.Windows.Forms.Panel();
+            this.btnOK = new System.Windows.Forms.Button();
+            this.PreviewPicture = new System.Windows.Forms.PictureBox();
+            this.PreviewGroup = new System.Windows.Forms.GroupBox();
+            this.ColumnCombo = new System.Windows.Forms.ComboBox();
+            this.AppendRules = new System.Windows.Forms.RadioButton();
+            this.OverwriteRules = new System.Windows.Forms.RadioButton();
+            this.AggregateLabel = new System.Windows.Forms.Label();
+            this.RuleCount = new System.Windows.Forms.NumericUpDown();
+            this.label2 = new System.Windows.Forms.Label();
+            this.AggregateCombo = new System.Windows.Forms.ComboBox();
+            this.GroupPanel = new System.Windows.Forms.Panel();
+            this.RuleCountPanel = new System.Windows.Forms.Panel();
+            this.DataGroup = new System.Windows.Forms.GroupBox();
+            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.ColorBrewerLabel = new System.Windows.Forms.LinkLabel();
+            this.panel2 = new System.Windows.Forms.Panel();
+            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.GradientFromColor = new System.Windows.Forms.ComboBox();
+            this.GradientToColor = new System.Windows.Forms.ComboBox();
+            this.ColorBrewerColorSet = new System.Windows.Forms.ComboBox();
+            this.ButtonPanel.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.PreviewPicture)).BeginInit();
+            this.PreviewGroup.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.RuleCount)).BeginInit();
+            this.GroupPanel.SuspendLayout();
+            this.RuleCountPanel.SuspendLayout();
+            this.DataGroup.SuspendLayout();
+            this.DisplayGroup.SuspendLayout();
+            this.ColorBrewerPanel.SuspendLayout();
+            this.panel2.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label1.Location = new System.Drawing.Point(8, 16);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(46, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Property";
+            // 
+            // btnCancel
+            // 
+            this.btnCancel.Anchor = System.Windows.Forms.AnchorStyles.Top;
+            this.btnCancel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.btnCancel.Location = new System.Drawing.Point(169, 8);
+            this.btnCancel.Name = "btnCancel";
+            this.btnCancel.Size = new System.Drawing.Size(75, 23);
+            this.btnCancel.TabIndex = 1;
+            this.btnCancel.Text = "Cancel";
+            this.btnCancel.UseVisualStyleBackColor = true;
+            // 
+            // ButtonPanel
+            // 
+            this.ButtonPanel.Controls.Add(this.btnCancel);
+            this.ButtonPanel.Controls.Add(this.btnOK);
+            this.ButtonPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.ButtonPanel.Location = new System.Drawing.Point(0, 327);
+            this.ButtonPanel.Name = "ButtonPanel";
+            this.ButtonPanel.Size = new System.Drawing.Size(333, 36);
+            this.ButtonPanel.TabIndex = 16;
+            // 
+            // btnOK
+            // 
+            this.btnOK.Anchor = System.Windows.Forms.AnchorStyles.Top;
+            this.btnOK.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.btnOK.Location = new System.Drawing.Point(88, 8);
+            this.btnOK.Name = "btnOK";
+            this.btnOK.Size = new System.Drawing.Size(75, 23);
+            this.btnOK.TabIndex = 0;
+            this.btnOK.Text = "OK";
+            this.btnOK.UseVisualStyleBackColor = true;
+            // 
+            // PreviewPicture
+            // 
+            this.PreviewPicture.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.PreviewPicture.Location = new System.Drawing.Point(8, 16);
+            this.PreviewPicture.Name = "PreviewPicture";
+            this.PreviewPicture.Size = new System.Drawing.Size(304, 24);
+            this.PreviewPicture.TabIndex = 0;
+            this.PreviewPicture.TabStop = false;
+            // 
+            // PreviewGroup
+            // 
+            this.PreviewGroup.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.PreviewGroup.Controls.Add(this.PreviewPicture);
+            this.PreviewGroup.Location = new System.Drawing.Point(8, 268);
+            this.PreviewGroup.Name = "PreviewGroup";
+            this.PreviewGroup.Size = new System.Drawing.Size(320, 48);
+            this.PreviewGroup.TabIndex = 15;
+            this.PreviewGroup.TabStop = false;
+            this.PreviewGroup.Text = "Preview";
+            // 
+            // ColumnCombo
+            // 
+            this.ColumnCombo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.ColumnCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.ColumnCombo.FormattingEnabled = true;
+            this.ColumnCombo.Location = new System.Drawing.Point(104, 16);
+            this.ColumnCombo.Name = "ColumnCombo";
+            this.ColumnCombo.Size = new System.Drawing.Size(208, 21);
+            this.ColumnCombo.TabIndex = 6;
+            // 
+            // AppendRules
+            // 
+            this.AppendRules.AutoSize = true;
+            this.AppendRules.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.AppendRules.Location = new System.Drawing.Point(8, 112);
+            this.AppendRules.Name = "AppendRules";
+            this.AppendRules.Size = new System.Drawing.Size(87, 17);
+            this.AppendRules.TabIndex = 4;
+            this.AppendRules.Text = "Append rules";
+            this.AppendRules.UseVisualStyleBackColor = true;
+            // 
+            // OverwriteRules
+            // 
+            this.OverwriteRules.AutoSize = true;
+            this.OverwriteRules.Checked = true;
+            this.OverwriteRules.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.OverwriteRules.Location = new System.Drawing.Point(8, 88);
+            this.OverwriteRules.Name = "OverwriteRules";
+            this.OverwriteRules.Size = new System.Drawing.Size(133, 17);
+            this.OverwriteRules.TabIndex = 3;
+            this.OverwriteRules.TabStop = true;
+            this.OverwriteRules.Text = "Overwrite existing rules";
+            this.OverwriteRules.UseVisualStyleBackColor = true;
+            // 
+            // AggregateLabel
+            // 
+            this.AggregateLabel.AutoSize = true;
+            this.AggregateLabel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.AggregateLabel.Location = new System.Drawing.Point(0, 0);
+            this.AggregateLabel.Name = "AggregateLabel";
+            this.AggregateLabel.Size = new System.Drawing.Size(74, 13);
+            this.AggregateLabel.TabIndex = 2;
+            this.AggregateLabel.Text = "Group method";
+            // 
+            // RuleCount
+            // 
+            this.RuleCount.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.RuleCount.Location = new System.Drawing.Point(96, 0);
+            this.RuleCount.Minimum = new decimal(new int[] {
+            3,
+            0,
+            0,
+            0});
+            this.RuleCount.Name = "RuleCount";
+            this.RuleCount.Size = new System.Drawing.Size(208, 20);
+            this.RuleCount.TabIndex = 7;
+            this.RuleCount.Value = new decimal(new int[] {
+            3,
+            0,
+            0,
+            0});
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label2.Location = new System.Drawing.Point(0, 0);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(56, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Rulecount";
+            // 
+            // AggregateCombo
+            // 
+            this.AggregateCombo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.AggregateCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.AggregateCombo.FormattingEnabled = true;
+            this.AggregateCombo.Items.AddRange(new object[] {
+            "Equal",
+            "Standard Deviation",
+            "Quantile",
+            "Individual"});
+            this.AggregateCombo.Location = new System.Drawing.Point(96, 0);
+            this.AggregateCombo.Name = "AggregateCombo";
+            this.AggregateCombo.Size = new System.Drawing.Size(208, 21);
+            this.AggregateCombo.TabIndex = 8;
+            // 
+            // GroupPanel
+            // 
+            this.GroupPanel.Controls.Add(this.AggregateLabel);
+            this.GroupPanel.Controls.Add(this.AggregateCombo);
+            this.GroupPanel.Location = new System.Drawing.Point(8, 40);
+            this.GroupPanel.Name = "GroupPanel";
+            this.GroupPanel.Size = new System.Drawing.Size(304, 24);
+            this.GroupPanel.TabIndex = 10;
+            // 
+            // RuleCountPanel
+            // 
+            this.RuleCountPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.RuleCountPanel.Controls.Add(this.RuleCount);
+            this.RuleCountPanel.Controls.Add(this.label2);
+            this.RuleCountPanel.Location = new System.Drawing.Point(8, 64);
+            this.RuleCountPanel.Name = "RuleCountPanel";
+            this.RuleCountPanel.Size = new System.Drawing.Size(424, 24);
+            this.RuleCountPanel.TabIndex = 9;
+            // 
+            // DataGroup
+            // 
+            this.DataGroup.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            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.Location = new System.Drawing.Point(8, 4);
+            this.DataGroup.Name = "DataGroup";
+            this.DataGroup.Size = new System.Drawing.Size(320, 136);
+            this.DataGroup.TabIndex = 13;
+            this.DataGroup.TabStop = false;
+            this.DataGroup.Text = "Data setup";
+            // 
+            // DisplayGroup
+            // 
+            this.DisplayGroup.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            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.Location = new System.Drawing.Point(8, 150);
+            this.DisplayGroup.Name = "DisplayGroup";
+            this.DisplayGroup.Size = new System.Drawing.Size(320, 112);
+            this.DisplayGroup.TabIndex = 11;
+            this.DisplayGroup.TabStop = false;
+            this.DisplayGroup.Text = "Display setup";
+            // 
+            // ColorBrewerPanel
+            // 
+            this.ColorBrewerPanel.Controls.Add(this.ColorBrewerColorSet);
+            this.ColorBrewerPanel.Controls.Add(this.label3);
+            this.ColorBrewerPanel.Controls.Add(this.ColorBrewerDataType);
+            this.ColorBrewerPanel.Location = new System.Drawing.Point(112, 48);
+            this.ColorBrewerPanel.Name = "ColorBrewerPanel";
+            this.ColorBrewerPanel.Size = new System.Drawing.Size(200, 24);
+            this.ColorBrewerPanel.TabIndex = 9;
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label3.Location = new System.Drawing.Point(90, 3);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(16, 13);
+            this.label3.TabIndex = 8;
+            this.label3.Text = "->";
+            // 
+            // ColorBrewerDataType
+            // 
+            this.ColorBrewerDataType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.ColorBrewerDataType.FormattingEnabled = true;
+            this.ColorBrewerDataType.Location = new System.Drawing.Point(0, 0);
+            this.ColorBrewerDataType.Name = "ColorBrewerDataType";
+            this.ColorBrewerDataType.Size = new System.Drawing.Size(88, 21);
+            this.ColorBrewerDataType.TabIndex = 6;
+            // 
+            // ColorBrewerLabel
+            // 
+            this.ColorBrewerLabel.AutoSize = true;
+            this.ColorBrewerLabel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.ColorBrewerLabel.Location = new System.Drawing.Point(33, 48);
+            this.ColorBrewerLabel.Name = "ColorBrewerLabel";
+            this.ColorBrewerLabel.Size = new System.Drawing.Size(64, 13);
+            this.ColorBrewerLabel.TabIndex = 5;
+            this.ColorBrewerLabel.TabStop = true;
+            this.ColorBrewerLabel.Text = "ColorBrewer";
+            // 
+            // panel2
+            // 
+            this.panel2.Controls.Add(this.GradientToColor);
+            this.panel2.Controls.Add(this.GradientFromColor);
+            this.panel2.Controls.Add(this.label4);
+            this.panel2.Location = new System.Drawing.Point(112, 24);
+            this.panel2.Name = "panel2";
+            this.panel2.Size = new System.Drawing.Size(200, 24);
+            this.panel2.TabIndex = 3;
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label4.Location = new System.Drawing.Point(90, 4);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(16, 13);
+            this.label4.TabIndex = 7;
+            this.label4.Text = "->";
+            // 
+            // ChangeBaseStyleBtn
+            // 
+            this.ChangeBaseStyleBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.ChangeBaseStyleBtn.Location = new System.Drawing.Point(16, 80);
+            this.ChangeBaseStyleBtn.Name = "ChangeBaseStyleBtn";
+            this.ChangeBaseStyleBtn.Size = new System.Drawing.Size(112, 23);
+            this.ChangeBaseStyleBtn.TabIndex = 2;
+            this.ChangeBaseStyleBtn.Text = "Change base style";
+            this.ChangeBaseStyleBtn.UseVisualStyleBackColor = true;
+            // 
+            // ColorBrewerColors
+            // 
+            this.ColorBrewerColors.AutoSize = true;
+            this.ColorBrewerColors.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.ColorBrewerColors.Location = new System.Drawing.Point(16, 48);
+            this.ColorBrewerColors.Name = "ColorBrewerColors";
+            this.ColorBrewerColors.Size = new System.Drawing.Size(14, 13);
+            this.ColorBrewerColors.TabIndex = 1;
+            this.ColorBrewerColors.TabStop = true;
+            this.ColorBrewerColors.UseVisualStyleBackColor = true;
+            // 
+            // GradientColors
+            // 
+            this.GradientColors.AutoSize = true;
+            this.GradientColors.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.GradientColors.Location = new System.Drawing.Point(16, 24);
+            this.GradientColors.Name = "GradientColors";
+            this.GradientColors.Size = new System.Drawing.Size(65, 17);
+            this.GradientColors.TabIndex = 0;
+            this.GradientColors.TabStop = true;
+            this.GradientColors.Text = "Gradient";
+            this.GradientColors.UseVisualStyleBackColor = true;
+            // 
+            // GradientFromColor
+            // 
+            this.GradientFromColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.GradientFromColor.FormattingEnabled = true;
+            this.GradientFromColor.Location = new System.Drawing.Point(0, 1);
+            this.GradientFromColor.Name = "GradientFromColor";
+            this.GradientFromColor.Size = new System.Drawing.Size(88, 21);
+            this.GradientFromColor.TabIndex = 8;
+            // 
+            // GradientToColor
+            // 
+            this.GradientToColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.GradientToColor.FormattingEnabled = true;
+            this.GradientToColor.Location = new System.Drawing.Point(109, 1);
+            this.GradientToColor.Name = "GradientToColor";
+            this.GradientToColor.Size = new System.Drawing.Size(88, 21);
+            this.GradientToColor.TabIndex = 9;
+            // 
+            // ColorBrewerColorSet
+            // 
+            this.ColorBrewerColorSet.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.ColorBrewerColorSet.FormattingEnabled = true;
+            this.ColorBrewerColorSet.Location = new System.Drawing.Point(109, 0);
+            this.ColorBrewerColorSet.Name = "ColorBrewerColorSet";
+            this.ColorBrewerColorSet.Size = new System.Drawing.Size(88, 21);
+            this.ColorBrewerColorSet.TabIndex = 10;
+            // 
+            // ThemeDialog
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(333, 363);
+            this.Controls.Add(this.DisplayGroup);
+            this.Controls.Add(this.ButtonPanel);
+            this.Controls.Add(this.PreviewGroup);
+            this.Controls.Add(this.DataGroup);
+            this.Name = "ThemeDialog";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+            this.Text = "Theme Creator";
+            this.ButtonPanel.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.PreviewPicture)).EndInit();
+            this.PreviewGroup.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.RuleCount)).EndInit();
+            this.GroupPanel.ResumeLayout(false);
+            this.GroupPanel.PerformLayout();
+            this.RuleCountPanel.ResumeLayout(false);
+            this.RuleCountPanel.PerformLayout();
+            this.DataGroup.ResumeLayout(false);
+            this.DataGroup.PerformLayout();
+            this.DisplayGroup.ResumeLayout(false);
+            this.DisplayGroup.PerformLayout();
+            this.ColorBrewerPanel.ResumeLayout(false);
+            this.ColorBrewerPanel.PerformLayout();
+            this.panel2.ResumeLayout(false);
+            this.panel2.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Button btnCancel;
+        private System.Windows.Forms.Panel ButtonPanel;
+        private System.Windows.Forms.Button btnOK;
+        private System.Windows.Forms.PictureBox PreviewPicture;
+        private System.Windows.Forms.GroupBox PreviewGroup;
+        private System.Windows.Forms.ComboBox ColumnCombo;
+        private System.Windows.Forms.RadioButton AppendRules;
+        private System.Windows.Forms.RadioButton OverwriteRules;
+        private System.Windows.Forms.Label AggregateLabel;
+        private System.Windows.Forms.NumericUpDown RuleCount;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.ComboBox AggregateCombo;
+        private System.Windows.Forms.Panel GroupPanel;
+        private System.Windows.Forms.Panel RuleCountPanel;
+        private System.Windows.Forms.GroupBox DataGroup;
+        private System.Windows.Forms.GroupBox DisplayGroup;
+        private System.Windows.Forms.Panel ColorBrewerPanel;
+        private System.Windows.Forms.ComboBox ColorBrewerColorSet;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.ComboBox ColorBrewerDataType;
+        private System.Windows.Forms.LinkLabel ColorBrewerLabel;
+        private System.Windows.Forms.Panel panel2;
+        private System.Windows.Forms.ComboBox GradientToColor;
+        private System.Windows.Forms.ComboBox GradientFromColor;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Button ChangeBaseStyleBtn;
+        private System.Windows.Forms.RadioButton ColorBrewerColors;
+        private System.Windows.Forms.RadioButton GradientColors;
+    }
+}
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Thematics/ThemeDialog.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Thematics/ThemeDialog.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Thematics/ThemeDialog.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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.Thematics
+{
+    public partial class ThemeDialog : Form
+    {
+        public ThemeDialog()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Thematics/ThemeDialog.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Thematics/ThemeDialog.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Thematics/ThemeDialog.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,289 @@
+namespace Maestro.Editors.LayerDefinition.Vector
+{
+    partial class VectorLayerSettingsSectionCtrl
+    {
+        /// <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.label1 = new System.Windows.Forms.Label();
+            this.txtFeatureSource = new System.Windows.Forms.TextBox();
+            this.btnBrowseFeatureSource = new System.Windows.Forms.Button();
+            this.grpFeatureClass = new System.Windows.Forms.GroupBox();
+            this.cmbGeometry = new System.Windows.Forms.ComboBox();
+            this.cmbSchema = new System.Windows.Forms.ComboBox();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.grpLayerSettings = new System.Windows.Forms.GroupBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.txtFilter = new System.Windows.Forms.TextBox();
+            this.txtHyperlink = new System.Windows.Forms.TextBox();
+            this.txtTooltip = new System.Windows.Forms.TextBox();
+            this.btnEditFilter = new System.Windows.Forms.Button();
+            this.btnEditHyperlink = new System.Windows.Forms.Button();
+            this.btnEditTooltip = new System.Windows.Forms.Button();
+            this.contentPanel.SuspendLayout();
+            this.grpFeatureClass.SuspendLayout();
+            this.grpLayerSettings.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // contentPanel
+            // 
+            this.contentPanel.Controls.Add(this.grpLayerSettings);
+            this.contentPanel.Controls.Add(this.grpFeatureClass);
+            this.contentPanel.Controls.Add(this.btnBrowseFeatureSource);
+            this.contentPanel.Controls.Add(this.txtFeatureSource);
+            this.contentPanel.Controls.Add(this.label1);
+            this.contentPanel.Size = new System.Drawing.Size(449, 240);
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(14, 22);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(80, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Feature Source";
+            // 
+            // txtFeatureSource
+            // 
+            this.txtFeatureSource.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtFeatureSource.Location = new System.Drawing.Point(114, 19);
+            this.txtFeatureSource.Name = "txtFeatureSource";
+            this.txtFeatureSource.ReadOnly = true;
+            this.txtFeatureSource.Size = new System.Drawing.Size(288, 20);
+            this.txtFeatureSource.TabIndex = 1;
+            // 
+            // btnBrowseFeatureSource
+            // 
+            this.btnBrowseFeatureSource.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnBrowseFeatureSource.Location = new System.Drawing.Point(408, 17);
+            this.btnBrowseFeatureSource.Name = "btnBrowseFeatureSource";
+            this.btnBrowseFeatureSource.Size = new System.Drawing.Size(32, 23);
+            this.btnBrowseFeatureSource.TabIndex = 2;
+            this.btnBrowseFeatureSource.Text = "...";
+            this.btnBrowseFeatureSource.UseVisualStyleBackColor = true;
+            // 
+            // grpFeatureClass
+            // 
+            this.grpFeatureClass.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.grpFeatureClass.Controls.Add(this.cmbGeometry);
+            this.grpFeatureClass.Controls.Add(this.cmbSchema);
+            this.grpFeatureClass.Controls.Add(this.label3);
+            this.grpFeatureClass.Controls.Add(this.label2);
+            this.grpFeatureClass.Location = new System.Drawing.Point(17, 46);
+            this.grpFeatureClass.Name = "grpFeatureClass";
+            this.grpFeatureClass.Size = new System.Drawing.Size(423, 81);
+            this.grpFeatureClass.TabIndex = 3;
+            this.grpFeatureClass.TabStop = false;
+            this.grpFeatureClass.Text = "Feature Class";
+            // 
+            // cmbGeometry
+            // 
+            this.cmbGeometry.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.cmbGeometry.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.cmbGeometry.FormattingEnabled = true;
+            this.cmbGeometry.Location = new System.Drawing.Point(121, 47);
+            this.cmbGeometry.Name = "cmbGeometry";
+            this.cmbGeometry.Size = new System.Drawing.Size(286, 21);
+            this.cmbGeometry.TabIndex = 3;
+            // 
+            // cmbSchema
+            // 
+            this.cmbSchema.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.cmbSchema.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.cmbSchema.FormattingEnabled = true;
+            this.cmbSchema.Location = new System.Drawing.Point(121, 19);
+            this.cmbSchema.Name = "cmbSchema";
+            this.cmbSchema.Size = new System.Drawing.Size(286, 21);
+            this.cmbSchema.TabIndex = 2;
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(15, 50);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(94, 13);
+            this.label3.TabIndex = 1;
+            this.label3.Text = "Geometry Property";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(15, 22);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(46, 13);
+            this.label2.TabIndex = 0;
+            this.label2.Text = "Schema";
+            // 
+            // grpLayerSettings
+            // 
+            this.grpLayerSettings.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.grpLayerSettings.Controls.Add(this.btnEditTooltip);
+            this.grpLayerSettings.Controls.Add(this.btnEditHyperlink);
+            this.grpLayerSettings.Controls.Add(this.btnEditFilter);
+            this.grpLayerSettings.Controls.Add(this.txtTooltip);
+            this.grpLayerSettings.Controls.Add(this.txtHyperlink);
+            this.grpLayerSettings.Controls.Add(this.txtFilter);
+            this.grpLayerSettings.Controls.Add(this.label6);
+            this.grpLayerSettings.Controls.Add(this.label5);
+            this.grpLayerSettings.Controls.Add(this.label4);
+            this.grpLayerSettings.Location = new System.Drawing.Point(17, 133);
+            this.grpLayerSettings.Name = "grpLayerSettings";
+            this.grpLayerSettings.Size = new System.Drawing.Size(423, 97);
+            this.grpLayerSettings.TabIndex = 4;
+            this.grpLayerSettings.TabStop = false;
+            this.grpLayerSettings.Text = "Layer Settings";
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(15, 22);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(29, 13);
+            this.label4.TabIndex = 0;
+            this.label4.Text = "Filter";
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(15, 47);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(51, 13);
+            this.label5.TabIndex = 1;
+            this.label5.Text = "Hyperlink";
+            // 
+            // label6
+            // 
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(15, 71);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(39, 13);
+            this.label6.TabIndex = 2;
+            this.label6.Text = "Tooltip";
+            // 
+            // txtFilter
+            // 
+            this.txtFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtFilter.Location = new System.Drawing.Point(121, 19);
+            this.txtFilter.Name = "txtFilter";
+            this.txtFilter.Size = new System.Drawing.Size(250, 20);
+            this.txtFilter.TabIndex = 3;
+            // 
+            // txtHyperlink
+            // 
+            this.txtHyperlink.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtHyperlink.Location = new System.Drawing.Point(121, 44);
+            this.txtHyperlink.Name = "txtHyperlink";
+            this.txtHyperlink.Size = new System.Drawing.Size(250, 20);
+            this.txtHyperlink.TabIndex = 4;
+            // 
+            // txtTooltip
+            // 
+            this.txtTooltip.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtTooltip.Location = new System.Drawing.Point(121, 68);
+            this.txtTooltip.Name = "txtTooltip";
+            this.txtTooltip.Size = new System.Drawing.Size(250, 20);
+            this.txtTooltip.TabIndex = 5;
+            // 
+            // btnEditFilter
+            // 
+            this.btnEditFilter.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnEditFilter.Location = new System.Drawing.Point(377, 17);
+            this.btnEditFilter.Name = "btnEditFilter";
+            this.btnEditFilter.Size = new System.Drawing.Size(30, 23);
+            this.btnEditFilter.TabIndex = 6;
+            this.btnEditFilter.Text = "...";
+            this.btnEditFilter.UseVisualStyleBackColor = true;
+            // 
+            // btnEditHyperlink
+            // 
+            this.btnEditHyperlink.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnEditHyperlink.Location = new System.Drawing.Point(377, 42);
+            this.btnEditHyperlink.Name = "btnEditHyperlink";
+            this.btnEditHyperlink.Size = new System.Drawing.Size(30, 23);
+            this.btnEditHyperlink.TabIndex = 7;
+            this.btnEditHyperlink.Text = "...";
+            this.btnEditHyperlink.UseVisualStyleBackColor = true;
+            // 
+            // btnEditTooltip
+            // 
+            this.btnEditTooltip.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnEditTooltip.Location = new System.Drawing.Point(377, 66);
+            this.btnEditTooltip.Name = "btnEditTooltip";
+            this.btnEditTooltip.Size = new System.Drawing.Size(30, 23);
+            this.btnEditTooltip.TabIndex = 8;
+            this.btnEditTooltip.Text = "...";
+            this.btnEditTooltip.UseVisualStyleBackColor = true;
+            // 
+            // ResourceSettingsSectionCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.HeaderText = "Resource Settings";
+            this.Name = "ResourceSettingsSectionCtrl";
+            this.Size = new System.Drawing.Size(449, 267);
+            this.contentPanel.ResumeLayout(false);
+            this.contentPanel.PerformLayout();
+            this.grpFeatureClass.ResumeLayout(false);
+            this.grpFeatureClass.PerformLayout();
+            this.grpLayerSettings.ResumeLayout(false);
+            this.grpLayerSettings.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Button btnBrowseFeatureSource;
+        private System.Windows.Forms.TextBox txtFeatureSource;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.GroupBox grpFeatureClass;
+        private System.Windows.Forms.ComboBox cmbGeometry;
+        private System.Windows.Forms.ComboBox cmbSchema;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.GroupBox grpLayerSettings;
+        private System.Windows.Forms.TextBox txtTooltip;
+        private System.Windows.Forms.TextBox txtHyperlink;
+        private System.Windows.Forms.TextBox txtFilter;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Button btnEditTooltip;
+        private System.Windows.Forms.Button btnEditHyperlink;
+        private System.Windows.Forms.Button btnEditFilter;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,39 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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 Maestro.Shared.UI;
+
+namespace Maestro.Editors.LayerDefinition.Vector
+{
+    [ToolboxItem(true)]
+    internal partial class VectorLayerSettingsSectionCtrl : CollapsiblePanel
+    {
+        public VectorLayerSettingsSectionCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerSettingsSectionCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,133 @@
+namespace Maestro.Editors.LayerDefinition.Vector
+{
+    partial class VectorLayerStyleSectionCtrl
+    {
+        /// <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.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.btnAdd = new System.Windows.Forms.ToolStripButton();
+            this.btnDelete = new System.Windows.Forms.ToolStripButton();
+            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.contentPanel.SuspendLayout();
+            this.toolStrip1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // contentPanel
+            // 
+            this.contentPanel.Controls.Add(this.scaleRangeListCtrl1);
+            this.contentPanel.Controls.Add(this.toolStrip1);
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnAdd,
+            this.btnDelete,
+            this.btnDuplicate,
+            this.toolStripSeparator1,
+            this.btnSort});
+            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Size = new System.Drawing.Size(449, 25);
+            this.toolStrip1.TabIndex = 0;
+            this.toolStrip1.Text = "toolStrip1";
+            // 
+            // btnAdd
+            // 
+            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.Text = "Add";
+            this.btnAdd.ToolTipText = "Add a scale range";
+            // 
+            // 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.Text = "Delete";
+            this.btnDelete.ToolTipText = "Delete selected scale range";
+            // 
+            // 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.Text = "Duplicate";
+            // 
+            // toolStripSeparator1
+            // 
+            this.toolStripSeparator1.Name = "toolStripSeparator1";
+            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
+            // 
+            // btnSort
+            // 
+            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.Text = "Sort";
+            this.btnSort.ToolTipText = "Sort the sacle ranges by display range";
+            // 
+            // scaleRangeListCtrl1
+            // 
+            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;
+            // 
+            // VectorLayerStyleSectionCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.HeaderText = "Layer Styles";
+            this.Name = "VectorLayerStyleSectionCtrl";
+            this.contentPanel.ResumeLayout(false);
+            this.contentPanel.PerformLayout();
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private Maestro.Editors.LayerDefinition.Scales.ScaleRangeListCtrl scaleRangeListCtrl1;
+        private System.Windows.Forms.ToolStripButton btnAdd;
+        private System.Windows.Forms.ToolStripButton btnDelete;
+        private System.Windows.Forms.ToolStripButton btnDuplicate;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+        private System.Windows.Forms.ToolStripButton btnSort;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,39 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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 Maestro.Shared.UI;
+
+namespace Maestro.Editors.LayerDefinition.Vector
+{
+    [ToolboxItem(true)]
+    internal partial class VectorLayerStyleSectionCtrl : CollapsiblePanel
+    {
+        public VectorLayerStyleSectionCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/Vector/VectorLayerStyleSectionCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,123 @@
+<?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="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,92 @@
+namespace Maestro.Editors.LayerDefinition
+{
+    partial class VectorLayerEditorCtrl
+    {
+        /// <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.vectorLayerSettingsSectionCtrl1 = new Maestro.Editors.LayerDefinition.Vector.VectorLayerSettingsSectionCtrl();
+            this.layerPropertiesSectionCtrl1 = new Maestro.Editors.LayerDefinition.LayerPropertiesSectionCtrl();
+            this.vectorLayerStyleSectionCtrl1 = new Maestro.Editors.LayerDefinition.Vector.VectorLayerStyleSectionCtrl();
+            this.SuspendLayout();
+            // 
+            // vectorLayerSettingsSectionCtrl1
+            // 
+            this.vectorLayerSettingsSectionCtrl1.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.vectorLayerSettingsSectionCtrl1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.vectorLayerSettingsSectionCtrl1.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.vectorLayerSettingsSectionCtrl1.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.vectorLayerSettingsSectionCtrl1.HeaderText = "Resource Settings";
+            this.vectorLayerSettingsSectionCtrl1.Location = new System.Drawing.Point(0, 0);
+            this.vectorLayerSettingsSectionCtrl1.Name = "vectorLayerSettingsSectionCtrl1";
+            this.vectorLayerSettingsSectionCtrl1.Size = new System.Drawing.Size(704, 267);
+            this.vectorLayerSettingsSectionCtrl1.TabIndex = 0;
+            // 
+            // layerPropertiesSectionCtrl1
+            // 
+            this.layerPropertiesSectionCtrl1.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.layerPropertiesSectionCtrl1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.layerPropertiesSectionCtrl1.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.layerPropertiesSectionCtrl1.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.layerPropertiesSectionCtrl1.HeaderText = "Layer Properties Visible in Viewer";
+            this.layerPropertiesSectionCtrl1.Location = new System.Drawing.Point(0, 267);
+            this.layerPropertiesSectionCtrl1.Name = "layerPropertiesSectionCtrl1";
+            this.layerPropertiesSectionCtrl1.Size = new System.Drawing.Size(704, 235);
+            this.layerPropertiesSectionCtrl1.TabIndex = 1;
+            // 
+            // vectorLayerStyleSectionCtrl1
+            // 
+            this.vectorLayerStyleSectionCtrl1.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.vectorLayerStyleSectionCtrl1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.vectorLayerStyleSectionCtrl1.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.vectorLayerStyleSectionCtrl1.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.vectorLayerStyleSectionCtrl1.HeaderText = "Layer Styles";
+            this.vectorLayerStyleSectionCtrl1.Location = new System.Drawing.Point(0, 502);
+            this.vectorLayerStyleSectionCtrl1.Name = "vectorLayerStyleSectionCtrl1";
+            this.vectorLayerStyleSectionCtrl1.Size = new System.Drawing.Size(704, 319);
+            this.vectorLayerStyleSectionCtrl1.TabIndex = 2;
+            // 
+            // VectorLayerEditorCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.AutoScroll = true;
+            this.Controls.Add(this.vectorLayerStyleSectionCtrl1);
+            this.Controls.Add(this.layerPropertiesSectionCtrl1);
+            this.Controls.Add(this.vectorLayerSettingsSectionCtrl1);
+            this.Name = "VectorLayerEditorCtrl";
+            this.Size = new System.Drawing.Size(704, 530);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private Maestro.Editors.LayerDefinition.Vector.VectorLayerSettingsSectionCtrl vectorLayerSettingsSectionCtrl1;
+        private LayerPropertiesSectionCtrl layerPropertiesSectionCtrl1;
+        private Maestro.Editors.LayerDefinition.Vector.VectorLayerStyleSectionCtrl vectorLayerStyleSectionCtrl1;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Maestro.Editors.LayerDefinition
+{
+    public partial class VectorLayerEditorCtrl : UserControl
+    {
+        public VectorLayerEditorCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/LayerDefinition/VectorLayerEditorCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Modified: sandbox/maestro-2.5/Maestro.Editors/Maestro.Editors.csproj
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Maestro.Editors.csproj	2010-05-17 09:29:37 UTC (rev 4893)
+++ sandbox/maestro-2.5/Maestro.Editors/Maestro.Editors.csproj	2010-05-17 12:44:09 UTC (rev 4894)
@@ -47,6 +47,66 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Common\ColorComboBox.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="Common\ColorComboWithTransparency.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Common\ColorComboWithTransparency.designer.cs">
+      <DependentUpon>ColorComboWithTransparency.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Common\CoordinateSystemPicker.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Common\CoordinateSystemPicker.Designer.cs">
+      <DependentUpon>CoordinateSystemPicker.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Common\CustomCombo.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="Common\DataFilesCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Common\DataFilesCtrl.Designer.cs">
+      <DependentUpon>DataFilesCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Common\FdoProviderPicker.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Common\FdoProviderPicker.Designer.cs">
+      <DependentUpon>FdoProviderPicker.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Common\SourceDataCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Common\SourceDataCtrl.Designer.cs">
+      <DependentUpon>SourceDataCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Common\SymbolPicker.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Common\SymbolPicker.Designer.cs">
+      <DependentUpon>SymbolPicker.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DrawingSource\DrawingSourceEditorCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DrawingSource\DrawingSourceEditorCtrl.Designer.cs">
+      <DependentUpon>DrawingSourceEditorCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DrawingSource\SheetSectionControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DrawingSource\SheetSectionControl.Designer.cs">
+      <DependentUpon>SheetSectionControl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DrawingSource\SourceSectionCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DrawingSource\SourceSectionCtrl.Designer.cs">
+      <DependentUpon>SourceSectionCtrl.cs</DependentUpon>
+    </Compile>
     <Compile Include="FeatureSource\CoordSysOverrideCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -71,6 +131,30 @@
     <Compile Include="FeatureSource\FeatureSourceEditorCtrl.Designer.cs">
       <DependentUpon>FeatureSourceEditorCtrl.cs</DependentUpon>
     </Compile>
+    <Compile Include="FeatureSource\Preview\LocalFeatureSourcePreviewCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="FeatureSource\Preview\LocalFeatureSourcePreviewCtrl.Designer.cs">
+      <DependentUpon>LocalFeatureSourcePreviewCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="FeatureSource\Preview\PreviewPane.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="FeatureSource\Preview\PreviewPane.Designer.cs">
+      <DependentUpon>PreviewPane.cs</DependentUpon>
+    </Compile>
+    <Compile Include="FeatureSource\Preview\SqlQueryCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="FeatureSource\Preview\SqlQueryCtrl.Designer.cs">
+      <DependentUpon>SqlQueryCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="FeatureSource\Preview\StandardQueryCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="FeatureSource\Preview\StandardQueryCtrl.Designer.cs">
+      <DependentUpon>StandardQueryCtrl.cs</DependentUpon>
+    </Compile>
     <Compile Include="Generic\ResourceDataCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -89,6 +173,72 @@
     <Compile Include="Generic\XmlEditorCtrl.Designer.cs">
       <DependentUpon>XmlEditorCtrl.cs</DependentUpon>
     </Compile>
+    <Compile Include="LayerDefinition\LayerPropertiesSectionCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\LayerPropertiesSectionCtrl.Designer.cs">
+      <DependentUpon>LayerPropertiesSectionCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LayerDefinition\Scales\ConditionCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Scales\ConditionCtrl.Designer.cs">
+      <DependentUpon>ConditionCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LayerDefinition\Scales\ItemStyleCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Scales\ItemStyleCtrl.Designer.cs">
+      <DependentUpon>ItemStyleCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LayerDefinition\Scales\ScaleRangeConditionsCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Scales\ScaleRangeConditionsCtrl.Designer.cs">
+      <DependentUpon>ScaleRangeConditionsCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LayerDefinition\Scales\ScaleRangeCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Scales\ScaleRangeCtrl.Designer.cs">
+      <DependentUpon>ScaleRangeCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LayerDefinition\Scales\ScaleRangeGeometryStyleCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Scales\ScaleRangeGeometryStyleCtrl.Designer.cs">
+      <DependentUpon>ScaleRangeGeometryStyleCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LayerDefinition\Scales\ScaleRangeListCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Scales\ScaleRangeListCtrl.Designer.cs">
+      <DependentUpon>ScaleRangeListCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LayerDefinition\Thematics\ThemeDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Thematics\ThemeDialog.Designer.cs">
+      <DependentUpon>ThemeDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LayerDefinition\VectorLayerEditorCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\VectorLayerEditorCtrl.Designer.cs">
+      <DependentUpon>VectorLayerEditorCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LayerDefinition\Vector\VectorLayerSettingsSectionCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Vector\VectorLayerSettingsSectionCtrl.Designer.cs">
+      <DependentUpon>VectorLayerSettingsSectionCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LayerDefinition\Vector\VectorLayerStyleSectionCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Vector\VectorLayerStyleSectionCtrl.Designer.cs">
+      <DependentUpon>VectorLayerStyleSectionCtrl.cs</DependentUpon>
+    </Compile>
     <Compile Include="LoadProcedure\InputFilesCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -119,6 +269,48 @@
     <Compile Include="LoadProcedure\ShpTransformationCtrl.Designer.cs">
       <DependentUpon>ShpTransformationCtrl.cs</DependentUpon>
     </Compile>
+    <Compile Include="MapDefinition\MapDefinitionEditorCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="MapDefinition\MapDefinitionEditorCtrl.Designer.cs">
+      <DependentUpon>MapDefinitionEditorCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="MapDefinition\MapLayersSectionCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="MapDefinition\MapLayersSectionCtrl.Designer.cs">
+      <DependentUpon>MapLayersSectionCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="MapDefinition\MapSettingsSectionCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="MapDefinition\MapSettingsSectionCtrl.Designer.cs">
+      <DependentUpon>MapSettingsSectionCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="PrintLayout\PrintCustomLogosSectionCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="PrintLayout\PrintCustomLogosSectionCtrl.Designer.cs">
+      <DependentUpon>PrintCustomLogosSectionCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="PrintLayout\PrintCustomTextSectionCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="PrintLayout\PrintCustomTextSectionCtrl.Designer.cs">
+      <DependentUpon>PrintCustomTextSectionCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="PrintLayout\PrintLayoutEditorCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="PrintLayout\PrintLayoutEditorCtrl.Designer.cs">
+      <DependentUpon>PrintLayoutEditorCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="PrintLayout\PrintPagePropertiesSectionCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="PrintLayout\PrintPagePropertiesSectionCtrl.Designer.cs">
+      <DependentUpon>PrintPagePropertiesSectionCtrl.cs</DependentUpon>
+    </Compile>
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Properties\Resources.Designer.cs">
       <AutoGen>True</AutoGen>
@@ -158,6 +350,49 @@
     <Service Include="{94E38DFF-614B-4cbd-B67C-F211BB35CE8B}" />
   </ItemGroup>
   <ItemGroup>
+    <EmbeddedResource Include="Common\ColorComboBox.resx">
+      <DependentUpon>ColorComboBox.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Common\ColorComboWithTransparency.resx">
+      <DependentUpon>ColorComboWithTransparency.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Common\CoordinateSystemPicker.resx">
+      <DependentUpon>CoordinateSystemPicker.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Common\CustomCombo.resx">
+      <DependentUpon>CustomCombo.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Common\DataFilesCtrl.resx">
+      <DependentUpon>DataFilesCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Common\FdoProviderPicker.resx">
+      <DependentUpon>FdoProviderPicker.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Common\SourceDataCtrl.resx">
+      <DependentUpon>SourceDataCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Common\SymbolPicker.resx">
+      <DependentUpon>SymbolPicker.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="DrawingSource\DrawingSourceEditorCtrl.resx">
+      <DependentUpon>DrawingSourceEditorCtrl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="DrawingSource\SheetSectionControl.resx">
+      <DependentUpon>SheetSectionControl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="DrawingSource\SourceSectionCtrl.resx">
+      <DependentUpon>SourceSectionCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
     <EmbeddedResource Include="FeatureSource\CoordSysOverrideCtrl.resx">
       <DependentUpon>CoordSysOverrideCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>
@@ -174,6 +409,22 @@
       <DependentUpon>FeatureSourceEditorCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="FeatureSource\Preview\LocalFeatureSourcePreviewCtrl.resx">
+      <DependentUpon>LocalFeatureSourcePreviewCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FeatureSource\Preview\PreviewPane.resx">
+      <DependentUpon>PreviewPane.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FeatureSource\Preview\SqlQueryCtrl.resx">
+      <DependentUpon>SqlQueryCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FeatureSource\Preview\StandardQueryCtrl.resx">
+      <DependentUpon>StandardQueryCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
     <EmbeddedResource Include="Generic\ResourceDataCtrl.resx">
       <DependentUpon>ResourceDataCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>
@@ -186,6 +437,50 @@
       <DependentUpon>XmlEditorCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\LayerPropertiesSectionCtrl.resx">
+      <DependentUpon>LayerPropertiesSectionCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Scales\ConditionCtrl.resx">
+      <DependentUpon>ConditionCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Scales\ItemStyleCtrl.resx">
+      <DependentUpon>ItemStyleCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Scales\ScaleRangeConditionsCtrl.resx">
+      <DependentUpon>ScaleRangeConditionsCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Scales\ScaleRangeCtrl.resx">
+      <DependentUpon>ScaleRangeCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Scales\ScaleRangeGeometryStyleCtrl.resx">
+      <DependentUpon>ScaleRangeGeometryStyleCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Scales\ScaleRangeListCtrl.resx">
+      <DependentUpon>ScaleRangeListCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Thematics\ThemeDialog.resx">
+      <DependentUpon>ThemeDialog.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\VectorLayerEditorCtrl.resx">
+      <DependentUpon>VectorLayerEditorCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Vector\VectorLayerSettingsSectionCtrl.resx">
+      <DependentUpon>VectorLayerSettingsSectionCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Vector\VectorLayerStyleSectionCtrl.resx">
+      <DependentUpon>VectorLayerStyleSectionCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
     <EmbeddedResource Include="LoadProcedure\InputFilesCtrl.resx">
       <DependentUpon>InputFilesCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>
@@ -206,6 +501,34 @@
       <DependentUpon>ShpTransformationCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="MapDefinition\MapDefinitionEditorCtrl.resx">
+      <DependentUpon>MapDefinitionEditorCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="MapDefinition\MapLayersSectionCtrl.resx">
+      <DependentUpon>MapLayersSectionCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="MapDefinition\MapSettingsSectionCtrl.resx">
+      <DependentUpon>MapSettingsSectionCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="PrintLayout\PrintCustomLogosSectionCtrl.resx">
+      <DependentUpon>PrintCustomLogosSectionCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="PrintLayout\PrintCustomTextSectionCtrl.resx">
+      <DependentUpon>PrintCustomTextSectionCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="PrintLayout\PrintLayoutEditorCtrl.resx">
+      <DependentUpon>PrintLayoutEditorCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="PrintLayout\PrintPagePropertiesSectionCtrl.resx">
+      <DependentUpon>PrintPagePropertiesSectionCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
     <EmbeddedResource Include="Properties\Resources.resx">
       <Generator>ResXFileCodeGenerator</Generator>
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
@@ -237,6 +560,10 @@
       <Project>{CFD19053-2172-41D3-8460-0FD2123A1E88}</Project>
       <Name>Maestro.Shared.UI</Name>
     </ProjectReference>
+    <ProjectReference Include="..\OSGeo.MapGuide.MaestroAPI\OSGeo.MapGuide.MaestroAPI.csproj">
+      <Project>{80FA3158-8B5F-48D1-A393-0378AFE48A7E}</Project>
+      <Name>OSGeo.MapGuide.MaestroAPI</Name>
+    </ProjectReference>
   </ItemGroup>
   <ItemGroup>
     <None Include="Resources\document--plus.png" />
@@ -296,9 +623,69 @@
     <None Include="Resources\cross-script.png" />
   </ItemGroup>
   <ItemGroup>
-    <Folder Include="DrawingSource\" />
-    <Folder Include="LayerDefinition\" />
-    <Folder Include="PrintLayout\" />
+    <None Include="Resources\drive-upload.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\tick-circle-frame.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\tick.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\cross.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\arrow-return-180.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\arrow-270.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\arrow-090.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\plus-circle.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\minus-circle.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\document-copy.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\sort-number.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\arrow-circle-135.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\sql.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\magnifier.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\table--arrow.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\cross-circle-frame.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\control-stop-square.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\control.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\document--pencil.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="DrawingSource\Preview\" />
+    <Folder Include="LayerDefinition\Drawing\" />
+    <Folder Include="LayerDefinition\Geometry\" />
+    <Folder Include="LayerDefinition\Raster\" />
+    <Folder Include="PrintLayout\Logos\" />
+    <Folder Include="PrintLayout\Text\" />
     <Folder Include="SymbolDefinition\" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

Added: sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapDefinitionEditorCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapDefinitionEditorCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapDefinitionEditorCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,77 @@
+namespace Maestro.Editors.MapDefinition
+{
+    partial class MapDefinitionEditorCtrl
+    {
+        /// <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.mapSettingsSectionCtrl1 = new Maestro.Editors.MapDefinition.MapSettingsSectionCtrl();
+            this.mapLayersSectionCtrl1 = new Maestro.Editors.MapDefinition.MapLayersSectionCtrl();
+            this.SuspendLayout();
+            // 
+            // mapSettingsSectionCtrl1
+            // 
+            this.mapSettingsSectionCtrl1.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.mapSettingsSectionCtrl1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.mapSettingsSectionCtrl1.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.mapSettingsSectionCtrl1.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.mapSettingsSectionCtrl1.HeaderText = "Map Settings";
+            this.mapSettingsSectionCtrl1.Location = new System.Drawing.Point(0, 0);
+            this.mapSettingsSectionCtrl1.Name = "mapSettingsSectionCtrl1";
+            this.mapSettingsSectionCtrl1.Size = new System.Drawing.Size(604, 206);
+            this.mapSettingsSectionCtrl1.TabIndex = 0;
+            // 
+            // mapLayersSectionCtrl1
+            // 
+            this.mapLayersSectionCtrl1.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.mapLayersSectionCtrl1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.mapLayersSectionCtrl1.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.mapLayersSectionCtrl1.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.mapLayersSectionCtrl1.HeaderText = "Layers";
+            this.mapLayersSectionCtrl1.Location = new System.Drawing.Point(0, 206);
+            this.mapLayersSectionCtrl1.Name = "mapLayersSectionCtrl1";
+            this.mapLayersSectionCtrl1.Size = new System.Drawing.Size(604, 319);
+            this.mapLayersSectionCtrl1.TabIndex = 1;
+            // 
+            // MapDefinitionEditorCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.AutoScroll = true;
+            this.Controls.Add(this.mapLayersSectionCtrl1);
+            this.Controls.Add(this.mapSettingsSectionCtrl1);
+            this.Name = "MapDefinitionEditorCtrl";
+            this.Size = new System.Drawing.Size(604, 500);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private MapSettingsSectionCtrl mapSettingsSectionCtrl1;
+        private MapLayersSectionCtrl mapLayersSectionCtrl1;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapDefinitionEditorCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapDefinitionEditorCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapDefinitionEditorCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.MapDefinition
+{
+    public partial class MapDefinitionEditorCtrl : UserControl
+    {
+        public MapDefinitionEditorCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapDefinitionEditorCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapDefinitionEditorCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapDefinitionEditorCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,226 @@
+namespace Maestro.Editors.MapDefinition
+{
+    partial class MapLayersSectionCtrl
+    {
+        /// <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.tabControl1 = new System.Windows.Forms.TabControl();
+            this.TAB_GROUP = new System.Windows.Forms.TabPage();
+            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.TAB_DRAWING_ORDER = new System.Windows.Forms.TabPage();
+            this.TAB_BASE_LAYERS = new System.Windows.Forms.TabPage();
+            this.trvLayersGroup = new Aga.Controls.Tree.TreeViewAdv();
+            this.toolStrip2 = new System.Windows.Forms.ToolStrip();
+            this.trvLayerDrawingOrder = new Aga.Controls.Tree.TreeViewAdv();
+            this.toolStrip3 = new System.Windows.Forms.ToolStrip();
+            this.trvBaseLayers = new Aga.Controls.Tree.TreeViewAdv();
+            this.splitter1 = new System.Windows.Forms.Splitter();
+            this.propertiesPanel = new System.Windows.Forms.Panel();
+            this.contentPanel.SuspendLayout();
+            this.tabControl1.SuspendLayout();
+            this.TAB_GROUP.SuspendLayout();
+            this.TAB_DRAWING_ORDER.SuspendLayout();
+            this.TAB_BASE_LAYERS.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // contentPanel
+            // 
+            this.contentPanel.Controls.Add(this.propertiesPanel);
+            this.contentPanel.Controls.Add(this.splitter1);
+            this.contentPanel.Controls.Add(this.tabControl1);
+            this.contentPanel.Size = new System.Drawing.Size(610, 292);
+            // 
+            // tabControl1
+            // 
+            this.tabControl1.Controls.Add(this.TAB_GROUP);
+            this.tabControl1.Controls.Add(this.TAB_DRAWING_ORDER);
+            this.tabControl1.Controls.Add(this.TAB_BASE_LAYERS);
+            this.tabControl1.Dock = System.Windows.Forms.DockStyle.Left;
+            this.tabControl1.Location = new System.Drawing.Point(0, 0);
+            this.tabControl1.Name = "tabControl1";
+            this.tabControl1.SelectedIndex = 0;
+            this.tabControl1.Size = new System.Drawing.Size(326, 292);
+            this.tabControl1.TabIndex = 0;
+            // 
+            // TAB_GROUP
+            // 
+            this.TAB_GROUP.Controls.Add(this.trvLayersGroup);
+            this.TAB_GROUP.Controls.Add(this.toolStrip1);
+            this.TAB_GROUP.Location = new System.Drawing.Point(4, 22);
+            this.TAB_GROUP.Name = "TAB_GROUP";
+            this.TAB_GROUP.Padding = new System.Windows.Forms.Padding(3);
+            this.TAB_GROUP.Size = new System.Drawing.Size(324, 257);
+            this.TAB_GROUP.TabIndex = 0;
+            this.TAB_GROUP.Text = "Layers by Group";
+            this.TAB_GROUP.UseVisualStyleBackColor = true;
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Location = new System.Drawing.Point(3, 3);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Size = new System.Drawing.Size(318, 25);
+            this.toolStrip1.TabIndex = 0;
+            this.toolStrip1.Text = "toolStrip1";
+            // 
+            // TAB_DRAWING_ORDER
+            // 
+            this.TAB_DRAWING_ORDER.Controls.Add(this.trvLayerDrawingOrder);
+            this.TAB_DRAWING_ORDER.Controls.Add(this.toolStrip2);
+            this.TAB_DRAWING_ORDER.Location = new System.Drawing.Point(4, 22);
+            this.TAB_DRAWING_ORDER.Name = "TAB_DRAWING_ORDER";
+            this.TAB_DRAWING_ORDER.Padding = new System.Windows.Forms.Padding(3);
+            this.TAB_DRAWING_ORDER.Size = new System.Drawing.Size(324, 257);
+            this.TAB_DRAWING_ORDER.TabIndex = 1;
+            this.TAB_DRAWING_ORDER.Text = "Layers by Drawing Order";
+            this.TAB_DRAWING_ORDER.UseVisualStyleBackColor = true;
+            // 
+            // TAB_BASE_LAYERS
+            // 
+            this.TAB_BASE_LAYERS.Controls.Add(this.trvBaseLayers);
+            this.TAB_BASE_LAYERS.Controls.Add(this.toolStrip3);
+            this.TAB_BASE_LAYERS.Location = new System.Drawing.Point(4, 22);
+            this.TAB_BASE_LAYERS.Name = "TAB_BASE_LAYERS";
+            this.TAB_BASE_LAYERS.Size = new System.Drawing.Size(318, 266);
+            this.TAB_BASE_LAYERS.TabIndex = 2;
+            this.TAB_BASE_LAYERS.Text = "Base Layer Groups";
+            this.TAB_BASE_LAYERS.UseVisualStyleBackColor = true;
+            // 
+            // trvLayersGroup
+            // 
+            this.trvLayersGroup.BackColor = System.Drawing.SystemColors.Window;
+            this.trvLayersGroup.BorderStyle = System.Windows.Forms.BorderStyle.None;
+            this.trvLayersGroup.DefaultToolTipProvider = null;
+            this.trvLayersGroup.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.trvLayersGroup.DragDropMarkColor = System.Drawing.Color.Black;
+            this.trvLayersGroup.LineColor = System.Drawing.SystemColors.ControlDark;
+            this.trvLayersGroup.Location = new System.Drawing.Point(3, 28);
+            this.trvLayersGroup.Model = null;
+            this.trvLayersGroup.Name = "trvLayersGroup";
+            this.trvLayersGroup.SelectedNode = null;
+            this.trvLayersGroup.Size = new System.Drawing.Size(318, 226);
+            this.trvLayersGroup.TabIndex = 1;
+            this.trvLayersGroup.Text = "treeViewAdv1";
+            // 
+            // toolStrip2
+            // 
+            this.toolStrip2.Location = new System.Drawing.Point(3, 3);
+            this.toolStrip2.Name = "toolStrip2";
+            this.toolStrip2.Size = new System.Drawing.Size(318, 25);
+            this.toolStrip2.TabIndex = 0;
+            this.toolStrip2.Text = "toolStrip2";
+            // 
+            // trvLayerDrawingOrder
+            // 
+            this.trvLayerDrawingOrder.BackColor = System.Drawing.SystemColors.Window;
+            this.trvLayerDrawingOrder.BorderStyle = System.Windows.Forms.BorderStyle.None;
+            this.trvLayerDrawingOrder.DefaultToolTipProvider = null;
+            this.trvLayerDrawingOrder.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.trvLayerDrawingOrder.DragDropMarkColor = System.Drawing.Color.Black;
+            this.trvLayerDrawingOrder.LineColor = System.Drawing.SystemColors.ControlDark;
+            this.trvLayerDrawingOrder.Location = new System.Drawing.Point(3, 28);
+            this.trvLayerDrawingOrder.Model = null;
+            this.trvLayerDrawingOrder.Name = "trvLayerDrawingOrder";
+            this.trvLayerDrawingOrder.SelectedNode = null;
+            this.trvLayerDrawingOrder.Size = new System.Drawing.Size(318, 226);
+            this.trvLayerDrawingOrder.TabIndex = 1;
+            this.trvLayerDrawingOrder.Text = "treeViewAdv1";
+            // 
+            // toolStrip3
+            // 
+            this.toolStrip3.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip3.Name = "toolStrip3";
+            this.toolStrip3.Size = new System.Drawing.Size(318, 25);
+            this.toolStrip3.TabIndex = 0;
+            this.toolStrip3.Text = "toolStrip3";
+            // 
+            // trvBaseLayers
+            // 
+            this.trvBaseLayers.BackColor = System.Drawing.SystemColors.Window;
+            this.trvBaseLayers.BorderStyle = System.Windows.Forms.BorderStyle.None;
+            this.trvBaseLayers.DefaultToolTipProvider = null;
+            this.trvBaseLayers.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.trvBaseLayers.DragDropMarkColor = System.Drawing.Color.Black;
+            this.trvBaseLayers.LineColor = System.Drawing.SystemColors.ControlDark;
+            this.trvBaseLayers.Location = new System.Drawing.Point(0, 25);
+            this.trvBaseLayers.Model = null;
+            this.trvBaseLayers.Name = "trvBaseLayers";
+            this.trvBaseLayers.SelectedNode = null;
+            this.trvBaseLayers.Size = new System.Drawing.Size(318, 241);
+            this.trvBaseLayers.TabIndex = 1;
+            this.trvBaseLayers.Text = "treeViewAdv1";
+            // 
+            // splitter1
+            // 
+            this.splitter1.Location = new System.Drawing.Point(326, 0);
+            this.splitter1.Name = "splitter1";
+            this.splitter1.Size = new System.Drawing.Size(3, 292);
+            this.splitter1.TabIndex = 1;
+            this.splitter1.TabStop = false;
+            // 
+            // propertiesPanel
+            // 
+            this.propertiesPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.propertiesPanel.Location = new System.Drawing.Point(329, 0);
+            this.propertiesPanel.Name = "propertiesPanel";
+            this.propertiesPanel.Size = new System.Drawing.Size(281, 292);
+            this.propertiesPanel.TabIndex = 2;
+            // 
+            // MapLayersSectionCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.HeaderText = "Layers";
+            this.Name = "MapLayersSectionCtrl";
+            this.Size = new System.Drawing.Size(610, 319);
+            this.contentPanel.ResumeLayout(false);
+            this.tabControl1.ResumeLayout(false);
+            this.TAB_GROUP.ResumeLayout(false);
+            this.TAB_GROUP.PerformLayout();
+            this.TAB_DRAWING_ORDER.ResumeLayout(false);
+            this.TAB_DRAWING_ORDER.PerformLayout();
+            this.TAB_BASE_LAYERS.ResumeLayout(false);
+            this.TAB_BASE_LAYERS.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.TabControl tabControl1;
+        private System.Windows.Forms.TabPage TAB_GROUP;
+        private System.Windows.Forms.TabPage TAB_DRAWING_ORDER;
+        private System.Windows.Forms.TabPage TAB_BASE_LAYERS;
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.Panel propertiesPanel;
+        private System.Windows.Forms.Splitter splitter1;
+        private Aga.Controls.Tree.TreeViewAdv trvLayersGroup;
+        private Aga.Controls.Tree.TreeViewAdv trvLayerDrawingOrder;
+        private System.Windows.Forms.ToolStrip toolStrip2;
+        private Aga.Controls.Tree.TreeViewAdv trvBaseLayers;
+        private System.Windows.Forms.ToolStrip toolStrip3;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,39 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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 Maestro.Shared.UI;
+
+namespace Maestro.Editors.MapDefinition
+{
+    [ToolboxItem(true)]
+    internal partial class MapLayersSectionCtrl : CollapsiblePanel
+    {
+        public MapLayersSectionCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -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="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="toolStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>116, 17</value>
+  </metadata>
+  <metadata name="toolStrip3.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>215, 17</value>
+  </metadata>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapSettingsSectionCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapSettingsSectionCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapSettingsSectionCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,283 @@
+namespace Maestro.Editors.MapDefinition
+{
+    partial class MapSettingsSectionCtrl
+    {
+        /// <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.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.groupBox2 = new System.Windows.Forms.GroupBox();
+            this.SetZoom = new System.Windows.Forms.Button();
+            this.txtUpperY = new System.Windows.Forms.TextBox();
+            this.label8 = new System.Windows.Forms.Label();
+            this.txtUpperX = new System.Windows.Forms.TextBox();
+            this.label7 = new System.Windows.Forms.Label();
+            this.txtLowerY = new System.Windows.Forms.TextBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.txtLowerX = new System.Windows.Forms.TextBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label9 = new System.Windows.Forms.Label();
+            this.txtDescription = new System.Windows.Forms.TextBox();
+            this.txtCoordinateSystem = new System.Windows.Forms.TextBox();
+            this.cmbBackgroundColor = new Maestro.Editors.Common.ColorComboBox();
+            this.btnPickCs = new System.Windows.Forms.Button();
+            this.contentPanel.SuspendLayout();
+            this.groupBox2.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // contentPanel
+            // 
+            this.contentPanel.Controls.Add(this.btnPickCs);
+            this.contentPanel.Controls.Add(this.cmbBackgroundColor);
+            this.contentPanel.Controls.Add(this.txtCoordinateSystem);
+            this.contentPanel.Controls.Add(this.txtDescription);
+            this.contentPanel.Controls.Add(this.groupBox2);
+            this.contentPanel.Controls.Add(this.label3);
+            this.contentPanel.Controls.Add(this.label2);
+            this.contentPanel.Controls.Add(this.label1);
+            this.contentPanel.Size = new System.Drawing.Size(561, 179);
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(17, 9);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(60, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Description";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(17, 35);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(95, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Coordinate System";
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(17, 61);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(92, 13);
+            this.label3.TabIndex = 2;
+            this.label3.Text = "Background Color";
+            // 
+            // groupBox2
+            // 
+            this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.groupBox2.Controls.Add(this.SetZoom);
+            this.groupBox2.Controls.Add(this.txtUpperY);
+            this.groupBox2.Controls.Add(this.label8);
+            this.groupBox2.Controls.Add(this.txtUpperX);
+            this.groupBox2.Controls.Add(this.label7);
+            this.groupBox2.Controls.Add(this.txtLowerY);
+            this.groupBox2.Controls.Add(this.label6);
+            this.groupBox2.Controls.Add(this.txtLowerX);
+            this.groupBox2.Controls.Add(this.label5);
+            this.groupBox2.Controls.Add(this.label4);
+            this.groupBox2.Controls.Add(this.label9);
+            this.groupBox2.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.groupBox2.Location = new System.Drawing.Point(20, 85);
+            this.groupBox2.Name = "groupBox2";
+            this.groupBox2.Size = new System.Drawing.Size(528, 80);
+            this.groupBox2.TabIndex = 4;
+            this.groupBox2.TabStop = false;
+            this.groupBox2.Text = "Initial map view";
+            // 
+            // SetZoom
+            // 
+            this.SetZoom.Enabled = false;
+            this.SetZoom.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.SetZoom.Location = new System.Drawing.Point(403, 22);
+            this.SetZoom.Name = "SetZoom";
+            this.SetZoom.Size = new System.Drawing.Size(104, 48);
+            this.SetZoom.TabIndex = 10;
+            this.SetZoom.Text = "Set view to current layers extent";
+            // 
+            // txtUpperY
+            // 
+            this.txtUpperY.Location = new System.Drawing.Point(280, 50);
+            this.txtUpperY.Name = "txtUpperY";
+            this.txtUpperY.Size = new System.Drawing.Size(96, 20);
+            this.txtUpperY.TabIndex = 9;
+            // 
+            // label8
+            // 
+            this.label8.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.label8.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label8.Location = new System.Drawing.Point(256, 50);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(16, 16);
+            this.label8.TabIndex = 8;
+            this.label8.Text = "Y";
+            // 
+            // txtUpperX
+            // 
+            this.txtUpperX.Location = new System.Drawing.Point(144, 50);
+            this.txtUpperX.Name = "txtUpperX";
+            this.txtUpperX.Size = new System.Drawing.Size(96, 20);
+            this.txtUpperX.TabIndex = 7;
+            // 
+            // label7
+            // 
+            this.label7.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.label7.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label7.Location = new System.Drawing.Point(120, 50);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(16, 16);
+            this.label7.TabIndex = 6;
+            this.label7.Text = "X";
+            // 
+            // txtLowerY
+            // 
+            this.txtLowerY.Location = new System.Drawing.Point(280, 24);
+            this.txtLowerY.Name = "txtLowerY";
+            this.txtLowerY.Size = new System.Drawing.Size(96, 20);
+            this.txtLowerY.TabIndex = 5;
+            // 
+            // label6
+            // 
+            this.label6.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.label6.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label6.Location = new System.Drawing.Point(256, 24);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(16, 16);
+            this.label6.TabIndex = 4;
+            this.label6.Text = "Y";
+            // 
+            // txtLowerX
+            // 
+            this.txtLowerX.Location = new System.Drawing.Point(144, 24);
+            this.txtLowerX.Name = "txtLowerX";
+            this.txtLowerX.Size = new System.Drawing.Size(96, 20);
+            this.txtLowerX.TabIndex = 3;
+            // 
+            // label5
+            // 
+            this.label5.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.label5.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label5.Location = new System.Drawing.Point(120, 24);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(16, 16);
+            this.label5.TabIndex = 2;
+            this.label5.Text = "X";
+            // 
+            // label4
+            // 
+            this.label4.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.label4.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label4.Location = new System.Drawing.Point(16, 50);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(80, 16);
+            this.label4.TabIndex = 1;
+            this.label4.Text = "Upper right";
+            // 
+            // label9
+            // 
+            this.label9.FlatStyle = System.Windows.Forms.FlatStyle.System;
+            this.label9.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label9.Location = new System.Drawing.Point(16, 24);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(88, 16);
+            this.label9.TabIndex = 0;
+            this.label9.Text = "Lower left";
+            // 
+            // txtDescription
+            // 
+            this.txtDescription.Location = new System.Drawing.Point(143, 6);
+            this.txtDescription.Name = "txtDescription";
+            this.txtDescription.Size = new System.Drawing.Size(405, 20);
+            this.txtDescription.TabIndex = 5;
+            // 
+            // txtCoordinateSystem
+            // 
+            this.txtCoordinateSystem.Location = new System.Drawing.Point(143, 32);
+            this.txtCoordinateSystem.Name = "txtCoordinateSystem";
+            this.txtCoordinateSystem.ReadOnly = true;
+            this.txtCoordinateSystem.Size = new System.Drawing.Size(371, 20);
+            this.txtCoordinateSystem.TabIndex = 6;
+            // 
+            // cmbBackgroundColor
+            // 
+            this.cmbBackgroundColor.FormattingEnabled = true;
+            this.cmbBackgroundColor.Location = new System.Drawing.Point(143, 58);
+            this.cmbBackgroundColor.Name = "cmbBackgroundColor";
+            this.cmbBackgroundColor.Size = new System.Drawing.Size(121, 21);
+            this.cmbBackgroundColor.TabIndex = 7;
+            // 
+            // btnPickCs
+            // 
+            this.btnPickCs.Location = new System.Drawing.Point(520, 30);
+            this.btnPickCs.Name = "btnPickCs";
+            this.btnPickCs.Size = new System.Drawing.Size(28, 23);
+            this.btnPickCs.TabIndex = 8;
+            this.btnPickCs.Text = "...";
+            this.btnPickCs.UseVisualStyleBackColor = true;
+            // 
+            // MapSettingsSectionCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.HeaderText = "Map Settings";
+            this.Name = "MapSettingsSectionCtrl";
+            this.Size = new System.Drawing.Size(561, 206);
+            this.contentPanel.ResumeLayout(false);
+            this.contentPanel.PerformLayout();
+            this.groupBox2.ResumeLayout(false);
+            this.groupBox2.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox txtCoordinateSystem;
+        private System.Windows.Forms.TextBox txtDescription;
+        private System.Windows.Forms.GroupBox groupBox2;
+        private System.Windows.Forms.Button SetZoom;
+        private System.Windows.Forms.TextBox txtUpperY;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.TextBox txtUpperX;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.TextBox txtLowerY;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.TextBox txtLowerX;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label9;
+        private Maestro.Editors.Common.ColorComboBox cmbBackgroundColor;
+        private System.Windows.Forms.Button btnPickCs;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapSettingsSectionCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapSettingsSectionCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapSettingsSectionCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,39 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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 Maestro.Shared.UI;
+
+namespace Maestro.Editors.MapDefinition
+{
+    [ToolboxItem(true)]
+    internal partial class MapSettingsSectionCtrl : CollapsiblePanel
+    {
+        public MapSettingsSectionCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapSettingsSectionCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapSettingsSectionCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/MapDefinition/MapSettingsSectionCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomLogosSectionCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomLogosSectionCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomLogosSectionCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,112 @@
+namespace Maestro.Editors.PrintLayout
+{
+    partial class PrintCustomLogosSectionCtrl
+    {
+        /// <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.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.btnAdd = new System.Windows.Forms.ToolStripButton();
+            this.btnEdit = new System.Windows.Forms.ToolStripButton();
+            this.btnDelete = new System.Windows.Forms.ToolStripButton();
+            this.lstCustomLogos = new System.Windows.Forms.ListView();
+            this.contentPanel.SuspendLayout();
+            this.toolStrip1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // contentPanel
+            // 
+            this.contentPanel.Controls.Add(this.lstCustomLogos);
+            this.contentPanel.Controls.Add(this.toolStrip1);
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnAdd,
+            this.btnEdit,
+            this.btnDelete});
+            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Size = new System.Drawing.Size(449, 25);
+            this.toolStrip1.TabIndex = 1;
+            this.toolStrip1.Text = "toolStrip1";
+            // 
+            // btnAdd
+            // 
+            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.Text = "Add";
+            // 
+            // btnEdit
+            // 
+            this.btnEdit.Image = global::Maestro.Editors.Properties.Resources.document__pencil;
+            this.btnEdit.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnEdit.Name = "btnEdit";
+            this.btnEdit.Size = new System.Drawing.Size(45, 22);
+            this.btnEdit.Text = "Edit";
+            // 
+            // btnDelete
+            // 
+            this.btnDelete.Image = global::Maestro.Editors.Properties.Resources.cross_script;
+            this.btnDelete.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnDelete.Name = "btnDelete";
+            this.btnDelete.Size = new System.Drawing.Size(58, 22);
+            this.btnDelete.Text = "Delete";
+            // 
+            // lstCustomLogos
+            // 
+            this.lstCustomLogos.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.lstCustomLogos.Location = new System.Drawing.Point(0, 25);
+            this.lstCustomLogos.Name = "lstCustomLogos";
+            this.lstCustomLogos.Size = new System.Drawing.Size(449, 267);
+            this.lstCustomLogos.TabIndex = 2;
+            this.lstCustomLogos.UseCompatibleStateImageBehavior = false;
+            // 
+            // PrintCustomLogosSectionCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.HeaderText = "Custom Logos";
+            this.Name = "PrintCustomLogosSectionCtrl";
+            this.contentPanel.ResumeLayout(false);
+            this.contentPanel.PerformLayout();
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.ToolStripButton btnAdd;
+        private System.Windows.Forms.ToolStripButton btnEdit;
+        private System.Windows.Forms.ToolStripButton btnDelete;
+        private System.Windows.Forms.ListView lstCustomLogos;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomLogosSectionCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomLogosSectionCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomLogosSectionCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,39 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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 Maestro.Shared.UI;
+
+namespace Maestro.Editors.PrintLayout
+{
+    [ToolboxItem(true)]
+    internal partial class PrintCustomLogosSectionCtrl : CollapsiblePanel
+    {
+        public PrintCustomLogosSectionCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomLogosSectionCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomLogosSectionCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomLogosSectionCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,123 @@
+<?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="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomTextSectionCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomTextSectionCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomTextSectionCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,112 @@
+namespace Maestro.Editors.PrintLayout
+{
+    partial class PrintCustomTextSectionCtrl
+    {
+        /// <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.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.btnAdd = new System.Windows.Forms.ToolStripButton();
+            this.btnEdit = new System.Windows.Forms.ToolStripButton();
+            this.btnDelete = new System.Windows.Forms.ToolStripButton();
+            this.lstCustomText = new System.Windows.Forms.ListView();
+            this.contentPanel.SuspendLayout();
+            this.toolStrip1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // contentPanel
+            // 
+            this.contentPanel.Controls.Add(this.lstCustomText);
+            this.contentPanel.Controls.Add(this.toolStrip1);
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnAdd,
+            this.btnEdit,
+            this.btnDelete});
+            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Size = new System.Drawing.Size(449, 25);
+            this.toolStrip1.TabIndex = 0;
+            this.toolStrip1.Text = "toolStrip1";
+            // 
+            // btnAdd
+            // 
+            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.Text = "Add";
+            // 
+            // btnEdit
+            // 
+            this.btnEdit.Image = global::Maestro.Editors.Properties.Resources.document__pencil;
+            this.btnEdit.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnEdit.Name = "btnEdit";
+            this.btnEdit.Size = new System.Drawing.Size(45, 22);
+            this.btnEdit.Text = "Edit";
+            // 
+            // btnDelete
+            // 
+            this.btnDelete.Image = global::Maestro.Editors.Properties.Resources.cross_script;
+            this.btnDelete.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnDelete.Name = "btnDelete";
+            this.btnDelete.Size = new System.Drawing.Size(58, 22);
+            this.btnDelete.Text = "Delete";
+            // 
+            // lstCustomText
+            // 
+            this.lstCustomText.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.lstCustomText.Location = new System.Drawing.Point(0, 25);
+            this.lstCustomText.Name = "lstCustomText";
+            this.lstCustomText.Size = new System.Drawing.Size(449, 267);
+            this.lstCustomText.TabIndex = 1;
+            this.lstCustomText.UseCompatibleStateImageBehavior = false;
+            // 
+            // PrintCustomTextSectionCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.HeaderText = "Custom Text";
+            this.Name = "PrintCustomTextSectionCtrl";
+            this.contentPanel.ResumeLayout(false);
+            this.contentPanel.PerformLayout();
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.ToolStripButton btnAdd;
+        private System.Windows.Forms.ToolStripButton btnEdit;
+        private System.Windows.Forms.ToolStripButton btnDelete;
+        private System.Windows.Forms.ListView lstCustomText;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomTextSectionCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomTextSectionCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomTextSectionCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,39 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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 Maestro.Shared.UI;
+
+namespace Maestro.Editors.PrintLayout
+{
+    [ToolboxItem(true)]
+    internal partial class PrintCustomTextSectionCtrl : CollapsiblePanel
+    {
+        public PrintCustomTextSectionCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomTextSectionCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomTextSectionCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintCustomTextSectionCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,123 @@
+<?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="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintLayoutEditorCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintLayoutEditorCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintLayoutEditorCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,92 @@
+namespace Maestro.Editors.PrintLayout
+{
+    partial class PrintLayoutEditorCtrl
+    {
+        /// <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.printPagePropertiesSectionCtrl1 = new Maestro.Editors.PrintLayout.PrintPagePropertiesSectionCtrl();
+            this.printCustomTextSectionCtrl1 = new Maestro.Editors.PrintLayout.PrintCustomTextSectionCtrl();
+            this.printCustomLogosSectionCtrl1 = new Maestro.Editors.PrintLayout.PrintCustomLogosSectionCtrl();
+            this.SuspendLayout();
+            // 
+            // printPagePropertiesSectionCtrl1
+            // 
+            this.printPagePropertiesSectionCtrl1.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.printPagePropertiesSectionCtrl1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.printPagePropertiesSectionCtrl1.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.printPagePropertiesSectionCtrl1.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.printPagePropertiesSectionCtrl1.HeaderText = "Page and Layout Properties";
+            this.printPagePropertiesSectionCtrl1.Location = new System.Drawing.Point(0, 0);
+            this.printPagePropertiesSectionCtrl1.Name = "printPagePropertiesSectionCtrl1";
+            this.printPagePropertiesSectionCtrl1.Size = new System.Drawing.Size(536, 217);
+            this.printPagePropertiesSectionCtrl1.TabIndex = 0;
+            // 
+            // printCustomTextSectionCtrl1
+            // 
+            this.printCustomTextSectionCtrl1.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.printCustomTextSectionCtrl1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.printCustomTextSectionCtrl1.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.printCustomTextSectionCtrl1.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.printCustomTextSectionCtrl1.HeaderText = "Custom Text";
+            this.printCustomTextSectionCtrl1.Location = new System.Drawing.Point(0, 217);
+            this.printCustomTextSectionCtrl1.Name = "printCustomTextSectionCtrl1";
+            this.printCustomTextSectionCtrl1.Size = new System.Drawing.Size(536, 185);
+            this.printCustomTextSectionCtrl1.TabIndex = 1;
+            // 
+            // printCustomLogosSectionCtrl1
+            // 
+            this.printCustomLogosSectionCtrl1.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.printCustomLogosSectionCtrl1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.printCustomLogosSectionCtrl1.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.printCustomLogosSectionCtrl1.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.printCustomLogosSectionCtrl1.HeaderText = "Custom Logos";
+            this.printCustomLogosSectionCtrl1.Location = new System.Drawing.Point(0, 402);
+            this.printCustomLogosSectionCtrl1.Name = "printCustomLogosSectionCtrl1";
+            this.printCustomLogosSectionCtrl1.Size = new System.Drawing.Size(536, 188);
+            this.printCustomLogosSectionCtrl1.TabIndex = 2;
+            // 
+            // PrintLayoutEditorCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.AutoScroll = true;
+            this.Controls.Add(this.printCustomLogosSectionCtrl1);
+            this.Controls.Add(this.printCustomTextSectionCtrl1);
+            this.Controls.Add(this.printPagePropertiesSectionCtrl1);
+            this.Name = "PrintLayoutEditorCtrl";
+            this.Size = new System.Drawing.Size(536, 435);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private PrintPagePropertiesSectionCtrl printPagePropertiesSectionCtrl1;
+        private PrintCustomTextSectionCtrl printCustomTextSectionCtrl1;
+        private PrintCustomLogosSectionCtrl printCustomLogosSectionCtrl1;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintLayoutEditorCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintLayoutEditorCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintLayoutEditorCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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;
+
+namespace Maestro.Editors.PrintLayout
+{
+    public partial class PrintLayoutEditorCtrl : UserControl
+    {
+        public PrintLayoutEditorCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintLayoutEditorCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintLayoutEditorCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintLayoutEditorCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,120 @@
+<?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>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintPagePropertiesSectionCtrl.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintPagePropertiesSectionCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintPagePropertiesSectionCtrl.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,210 @@
+namespace Maestro.Editors.PrintLayout
+{
+    partial class PrintPagePropertiesSectionCtrl
+    {
+        /// <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.label1 = new System.Windows.Forms.Label();
+            this.bgColorPicker = new System.Windows.Forms.ColorDialog();
+            this.txtBgColor = new System.Windows.Forms.TextBox();
+            this.btnPickColor = new System.Windows.Forms.Button();
+            this.grpLayout = new System.Windows.Forms.GroupBox();
+            this.chkTitle = new System.Windows.Forms.CheckBox();
+            this.chkURL = new System.Windows.Forms.CheckBox();
+            this.chkLegend = new System.Windows.Forms.CheckBox();
+            this.chkDateTime = new System.Windows.Forms.CheckBox();
+            this.chkScaleBar = new System.Windows.Forms.CheckBox();
+            this.chkCustomLogos = new System.Windows.Forms.CheckBox();
+            this.chkNorthArrow = new System.Windows.Forms.CheckBox();
+            this.chkCustomText = new System.Windows.Forms.CheckBox();
+            this.contentPanel.SuspendLayout();
+            this.grpLayout.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // contentPanel
+            // 
+            this.contentPanel.Controls.Add(this.grpLayout);
+            this.contentPanel.Controls.Add(this.btnPickColor);
+            this.contentPanel.Controls.Add(this.txtBgColor);
+            this.contentPanel.Controls.Add(this.label1);
+            this.contentPanel.Size = new System.Drawing.Size(449, 190);
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(16, 18);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(92, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Background Color";
+            // 
+            // txtBgColor
+            // 
+            this.txtBgColor.Location = new System.Drawing.Point(114, 15);
+            this.txtBgColor.Name = "txtBgColor";
+            this.txtBgColor.ReadOnly = true;
+            this.txtBgColor.Size = new System.Drawing.Size(123, 20);
+            this.txtBgColor.TabIndex = 1;
+            // 
+            // btnPickColor
+            // 
+            this.btnPickColor.Location = new System.Drawing.Point(243, 13);
+            this.btnPickColor.Name = "btnPickColor";
+            this.btnPickColor.Size = new System.Drawing.Size(26, 23);
+            this.btnPickColor.TabIndex = 2;
+            this.btnPickColor.Text = "...";
+            this.btnPickColor.UseVisualStyleBackColor = true;
+            // 
+            // grpLayout
+            // 
+            this.grpLayout.Controls.Add(this.chkCustomText);
+            this.grpLayout.Controls.Add(this.chkNorthArrow);
+            this.grpLayout.Controls.Add(this.chkCustomLogos);
+            this.grpLayout.Controls.Add(this.chkScaleBar);
+            this.grpLayout.Controls.Add(this.chkDateTime);
+            this.grpLayout.Controls.Add(this.chkLegend);
+            this.grpLayout.Controls.Add(this.chkURL);
+            this.grpLayout.Controls.Add(this.chkTitle);
+            this.grpLayout.Location = new System.Drawing.Point(19, 51);
+            this.grpLayout.Name = "grpLayout";
+            this.grpLayout.Size = new System.Drawing.Size(405, 122);
+            this.grpLayout.TabIndex = 3;
+            this.grpLayout.TabStop = false;
+            this.grpLayout.Text = "Layout Visibility";
+            // 
+            // chkTitle
+            // 
+            this.chkTitle.AutoSize = true;
+            this.chkTitle.Location = new System.Drawing.Point(19, 19);
+            this.chkTitle.Name = "chkTitle";
+            this.chkTitle.Size = new System.Drawing.Size(46, 17);
+            this.chkTitle.TabIndex = 0;
+            this.chkTitle.Text = "Title";
+            this.chkTitle.UseVisualStyleBackColor = true;
+            // 
+            // chkURL
+            // 
+            this.chkURL.AutoSize = true;
+            this.chkURL.Location = new System.Drawing.Point(184, 19);
+            this.chkURL.Name = "chkURL";
+            this.chkURL.Size = new System.Drawing.Size(48, 17);
+            this.chkURL.TabIndex = 1;
+            this.chkURL.Text = "URL";
+            this.chkURL.UseVisualStyleBackColor = true;
+            // 
+            // chkLegend
+            // 
+            this.chkLegend.AutoSize = true;
+            this.chkLegend.Location = new System.Drawing.Point(19, 43);
+            this.chkLegend.Name = "chkLegend";
+            this.chkLegend.Size = new System.Drawing.Size(62, 17);
+            this.chkLegend.TabIndex = 2;
+            this.chkLegend.Text = "Legend";
+            this.chkLegend.UseVisualStyleBackColor = true;
+            // 
+            // chkDateTime
+            // 
+            this.chkDateTime.AutoSize = true;
+            this.chkDateTime.Location = new System.Drawing.Point(184, 43);
+            this.chkDateTime.Name = "chkDateTime";
+            this.chkDateTime.Size = new System.Drawing.Size(77, 17);
+            this.chkDateTime.TabIndex = 3;
+            this.chkDateTime.Text = "Date/Time";
+            this.chkDateTime.UseVisualStyleBackColor = true;
+            // 
+            // chkScaleBar
+            // 
+            this.chkScaleBar.AutoSize = true;
+            this.chkScaleBar.Location = new System.Drawing.Point(19, 67);
+            this.chkScaleBar.Name = "chkScaleBar";
+            this.chkScaleBar.Size = new System.Drawing.Size(72, 17);
+            this.chkScaleBar.TabIndex = 4;
+            this.chkScaleBar.Text = "Scale Bar";
+            this.chkScaleBar.UseVisualStyleBackColor = true;
+            // 
+            // chkCustomLogos
+            // 
+            this.chkCustomLogos.AutoSize = true;
+            this.chkCustomLogos.Location = new System.Drawing.Point(184, 66);
+            this.chkCustomLogos.Name = "chkCustomLogos";
+            this.chkCustomLogos.Size = new System.Drawing.Size(93, 17);
+            this.chkCustomLogos.TabIndex = 5;
+            this.chkCustomLogos.Text = "Custom Logos";
+            this.chkCustomLogos.UseVisualStyleBackColor = true;
+            // 
+            // chkNorthArrow
+            // 
+            this.chkNorthArrow.AutoSize = true;
+            this.chkNorthArrow.Location = new System.Drawing.Point(19, 91);
+            this.chkNorthArrow.Name = "chkNorthArrow";
+            this.chkNorthArrow.Size = new System.Drawing.Size(82, 17);
+            this.chkNorthArrow.TabIndex = 6;
+            this.chkNorthArrow.Text = "North Arrow";
+            this.chkNorthArrow.UseVisualStyleBackColor = true;
+            // 
+            // chkCustomText
+            // 
+            this.chkCustomText.AutoSize = true;
+            this.chkCustomText.Location = new System.Drawing.Point(184, 90);
+            this.chkCustomText.Name = "chkCustomText";
+            this.chkCustomText.Size = new System.Drawing.Size(85, 17);
+            this.chkCustomText.TabIndex = 7;
+            this.chkCustomText.Text = "Custom Text";
+            this.chkCustomText.UseVisualStyleBackColor = true;
+            // 
+            // PrintPagePropertiesSectionCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.HeaderText = "Page and Layout Properties";
+            this.Name = "PrintPagePropertiesSectionCtrl";
+            this.Size = new System.Drawing.Size(449, 217);
+            this.contentPanel.ResumeLayout(false);
+            this.contentPanel.PerformLayout();
+            this.grpLayout.ResumeLayout(false);
+            this.grpLayout.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.ColorDialog bgColorPicker;
+        private System.Windows.Forms.GroupBox grpLayout;
+        private System.Windows.Forms.CheckBox chkCustomText;
+        private System.Windows.Forms.CheckBox chkNorthArrow;
+        private System.Windows.Forms.CheckBox chkCustomLogos;
+        private System.Windows.Forms.CheckBox chkScaleBar;
+        private System.Windows.Forms.CheckBox chkDateTime;
+        private System.Windows.Forms.CheckBox chkLegend;
+        private System.Windows.Forms.CheckBox chkURL;
+        private System.Windows.Forms.CheckBox chkTitle;
+        private System.Windows.Forms.Button btnPickColor;
+        private System.Windows.Forms.TextBox txtBgColor;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintPagePropertiesSectionCtrl.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintPagePropertiesSectionCtrl.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintPagePropertiesSectionCtrl.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,39 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// 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 Maestro.Shared.UI;
+
+namespace Maestro.Editors.PrintLayout
+{
+    [ToolboxItem(true)]
+    internal partial class PrintPagePropertiesSectionCtrl : CollapsiblePanel
+    {
+        public PrintPagePropertiesSectionCtrl()
+        {
+            InitializeComponent();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintPagePropertiesSectionCtrl.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintPagePropertiesSectionCtrl.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Editors/PrintLayout/PrintPagePropertiesSectionCtrl.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -0,0 +1,123 @@
+<?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="bgColorPicker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
\ No newline at end of file

Modified: sandbox/maestro-2.5/Maestro.Editors/Properties/Resources.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Properties/Resources.Designer.cs	2010-05-17 09:29:37 UTC (rev 4893)
+++ sandbox/maestro-2.5/Maestro.Editors/Properties/Resources.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:2.0.50727.4927
+//     Runtime Version:2.0.50727.3053
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
@@ -102,6 +102,62 @@
             }
         }
         
+        internal static System.Drawing.Bitmap arrow_090 {
+            get {
+                object obj = ResourceManager.GetObject("arrow-090", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap arrow_270 {
+            get {
+                object obj = ResourceManager.GetObject("arrow-270", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap arrow_circle_135 {
+            get {
+                object obj = ResourceManager.GetObject("arrow-circle-135", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap arrow_return_180 {
+            get {
+                object obj = ResourceManager.GetObject("arrow-return-180", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap control {
+            get {
+                object obj = ResourceManager.GetObject("control", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap control_stop_square {
+            get {
+                object obj = ResourceManager.GetObject("control-stop-square", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap cross {
+            get {
+                object obj = ResourceManager.GetObject("cross", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap cross_circle_frame {
+            get {
+                object obj = ResourceManager.GetObject("cross-circle-frame", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         internal static System.Drawing.Bitmap cross_script {
             get {
                 object obj = ResourceManager.GetObject("cross-script", resourceCulture);
@@ -130,6 +186,13 @@
             }
         }
         
+        internal static System.Drawing.Bitmap document__pencil {
+            get {
+                object obj = ResourceManager.GetObject("document--pencil", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         internal static System.Drawing.Bitmap document__plus {
             get {
                 object obj = ResourceManager.GetObject("document--plus", resourceCulture);
@@ -137,6 +200,13 @@
             }
         }
         
+        internal static System.Drawing.Bitmap document_copy {
+            get {
+                object obj = ResourceManager.GetObject("document-copy", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         internal static System.Drawing.Bitmap drive_download {
             get {
                 object obj = ResourceManager.GetObject("drive-download", resourceCulture);
@@ -144,6 +214,13 @@
             }
         }
         
+        internal static System.Drawing.Bitmap drive_upload {
+            get {
+                object obj = ResourceManager.GetObject("drive-upload", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         internal static System.Drawing.Bitmap function {
             get {
                 object obj = ResourceManager.GetObject("function", resourceCulture);
@@ -158,6 +235,54 @@
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to infinite.
+        /// </summary>
+        internal static string InfiniteValue {
+            get {
+                return ResourceManager.GetString("InfiniteValue", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Invalid value.
+        /// </summary>
+        internal static string InvalidValueError {
+            get {
+                return ResourceManager.GetString("InvalidValueError", resourceCulture);
+            }
+        }
+        
+        internal static System.Drawing.Bitmap magnifier {
+            get {
+                object obj = ResourceManager.GetObject("magnifier", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap minus_circle {
+            get {
+                object obj = ResourceManager.GetObject("minus-circle", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to More colors....
+        /// </summary>
+        internal static string MoreColorsName {
+            get {
+                return ResourceManager.GetString("MoreColorsName", resourceCulture);
+            }
+        }
+        
+        internal static System.Drawing.Bitmap plus_circle {
+            get {
+                object obj = ResourceManager.GetObject("plus-circle", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         internal static System.Drawing.Bitmap script__arrow {
             get {
                 object obj = ResourceManager.GetObject("script--arrow", resourceCulture);
@@ -165,6 +290,20 @@
             }
         }
         
+        internal static System.Drawing.Bitmap sort_number {
+            get {
+                object obj = ResourceManager.GetObject("sort-number", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap sql {
+            get {
+                object obj = ResourceManager.GetObject("sql", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         internal static System.Drawing.Bitmap sql_join {
             get {
                 object obj = ResourceManager.GetObject("sql-join", resourceCulture);
@@ -192,5 +331,35 @@
                 return ((System.Drawing.Bitmap)(obj));
             }
         }
+        
+        internal static System.Drawing.Bitmap table__arrow {
+            get {
+                object obj = ResourceManager.GetObject("table--arrow", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap tick {
+            get {
+                object obj = ResourceManager.GetObject("tick", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap tick_circle_frame {
+            get {
+                object obj = ResourceManager.GetObject("tick-circle-frame", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Transparent.
+        /// </summary>
+        internal static string TransparentName {
+            get {
+                return ResourceManager.GetString("TransparentName", resourceCulture);
+            }
+        }
     }
 }

Modified: sandbox/maestro-2.5/Maestro.Editors/Properties/Resources.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Editors/Properties/Resources.resx	2010-05-17 09:29:37 UTC (rev 4893)
+++ sandbox/maestro-2.5/Maestro.Editors/Properties/Resources.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -118,61 +118,132 @@
     <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="sql-join-inner" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\sql-join-inner.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="minus-circle" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\minus-circle.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="cross-script" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\cross-script.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="sql-join-left" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\sql-join-left.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="drive-upload" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\drive-upload.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="InfiniteValue" xml:space="preserve">
+    <value>infinite</value>
+    <comment>A value that is displayed when the value assigned is infinite</comment>
+  </data>
+  <data name="magnifier" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\magnifier.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="tick" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\tick.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="plus-circle" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\plus-circle.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
   <data name="application-search-result" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\application-search-result.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
-  <data name="sql-join-inner" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\sql-join-inner.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  <data name="control-stop-square" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\control-stop-square.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
-  <data name="databases-relation" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\databases-relation.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  <data name="InvalidValueError" xml:space="preserve">
+    <value>Invalid value</value>
+    <comment>An error message that is displayed when the entered value is invalid</comment>
   </data>
   <data name="document--plus" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\document--plus.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="document--minus" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\document--minus.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="control" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\control.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="arrow-return-180" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\arrow-return-180.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="table--arrow" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\table--arrow.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="document-copy" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\document-copy.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="databases-relation" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\databases-relation.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="cross-circle-frame" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\cross-circle-frame.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
   <data name="globe--arrow" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\globe--arrow.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="tick-circle-frame" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\tick-circle-frame.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
   <data name="script--arrow" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\script--arrow.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
-  <data name="database--plus" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\database--plus.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  <data name="sort-number" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\sort-number.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
-  <data name="sql-join" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\sql-join.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  <data name="application--arrow" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\application--arrow.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="arrow-270" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\arrow-270.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="sql-join-right" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\sql-join-right.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="application--minus" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\application--minus.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="arrow-circle-135" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\arrow-circle-135.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="cross" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\cross.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="arrow-090" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\arrow-090.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="drive-download" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\drive-download.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
   <data name="application--plus" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\application--plus.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="sql-join" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\sql-join.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
   <data name="application-export" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\application-export.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
-  <data name="application--minus" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\application--minus.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  <data name="database--plus" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\database--plus.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
-  <data name="sql-join-right" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\sql-join-right.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  <data name="sql" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\sql.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
-  <data name="application--arrow" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\application--arrow.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  <data name="function" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\function.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
-  <data name="sql-join-left" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\sql-join-left.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
   <data name="application-import" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\application-import.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
-  <data name="function" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\function.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  <data name="document--pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\document--pencil.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
-  <data name="document--minus" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\document--minus.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  <data name="MoreColorsName" xml:space="preserve">
+    <value>More colors...</value>
   </data>
-  <data name="drive-download" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\drive-download.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  <data name="TransparentName" xml:space="preserve">
+    <value>Transparent</value>
   </data>
-  <data name="cross-script" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\cross-script.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
 </root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/arrow-090.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/arrow-090.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/arrow-270.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/arrow-270.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/arrow-circle-135.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/arrow-circle-135.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/arrow-return-180.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/arrow-return-180.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/control-stop-square.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/control-stop-square.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/control.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/control.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/cross-circle-frame.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/cross-circle-frame.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/cross.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/cross.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/document--pencil.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/document--pencil.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/document-copy.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/document-copy.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/drive-upload.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/drive-upload.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/magnifier.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/magnifier.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/minus-circle.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/minus-circle.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/plus-circle.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/plus-circle.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/sort-number.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/sort-number.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/sql.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/sql.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/table--arrow.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/table--arrow.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/tick-circle-frame.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/tick-circle-frame.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Editors/Resources/tick.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Editors/Resources/tick.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Modified: sandbox/maestro-2.5/Maestro.Shared.UI/CollapsiblePanel.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Shared.UI/CollapsiblePanel.cs	2010-05-17 09:29:37 UTC (rev 4893)
+++ sandbox/maestro-2.5/Maestro.Shared.UI/CollapsiblePanel.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -48,6 +48,13 @@
             InitializeComponent();
         }
 
+        protected override void OnLoad(EventArgs e)
+        {
+            base.OnLoad(e);
+            btnCollapse.Visible = !this.Collapsed;
+            btnExpand.Visible = this.Collapsed;
+        }
+
         [Category("Collapsible Panel Header")]
         public Color HeaderBackgroundColor
         {
@@ -80,8 +87,8 @@
         [Category("Collapsible Panel")]
         public bool CanCollapse
         {
-            get { return btnCollapse.Enabled; }
-            set { btnCollapse.Enabled = value; }
+            get { return btnCollapse.Visible; }
+            set { btnCollapse.Visible = value; }
         }
 
         private bool _collapsed;
@@ -112,8 +119,8 @@
                         this.Height += restoreHeight;
                     }
                 }
-                btnCollapse.Enabled = !_collapsed;
-                btnExpand.Enabled = _collapsed;
+                btnCollapse.Visible = !_collapsed;
+                btnExpand.Visible = _collapsed;
             }
         }
 

Modified: sandbox/maestro-2.5/Maestro.Shared.UI/CollapsiblePanel.designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Shared.UI/CollapsiblePanel.designer.cs	2010-05-17 09:29:37 UTC (rev 4893)
+++ sandbox/maestro-2.5/Maestro.Shared.UI/CollapsiblePanel.designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -53,7 +53,8 @@
             this.btnExpand.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
             this.btnExpand.BackgroundImage = global::Maestro.Shared.UI.Properties.Resources.plus_white;
             this.btnExpand.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.btnExpand.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
+            this.btnExpand.FlatAppearance.BorderSize = 0;
+            this.btnExpand.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
             this.btnExpand.Location = new System.Drawing.Point(430, 5);
             this.btnExpand.Name = "btnExpand";
             this.btnExpand.Size = new System.Drawing.Size(16, 16);
@@ -66,7 +67,8 @@
             this.btnCollapse.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
             this.btnCollapse.BackgroundImage = global::Maestro.Shared.UI.Properties.Resources.minus_white;
             this.btnCollapse.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-            this.btnCollapse.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
+            this.btnCollapse.FlatAppearance.BorderSize = 0;
+            this.btnCollapse.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
             this.btnCollapse.Location = new System.Drawing.Point(408, 5);
             this.btnCollapse.Name = "btnCollapse";
             this.btnCollapse.Size = new System.Drawing.Size(16, 16);

Modified: sandbox/maestro-2.5/Maestro.Shared.UI/Maestro.Shared.UI.csproj
===================================================================
--- sandbox/maestro-2.5/Maestro.Shared.UI/Maestro.Shared.UI.csproj	2010-05-17 09:29:37 UTC (rev 4893)
+++ sandbox/maestro-2.5/Maestro.Shared.UI/Maestro.Shared.UI.csproj	2010-05-17 12:44:09 UTC (rev 4894)
@@ -50,9 +50,6 @@
       <DesignTime>True</DesignTime>
       <DependentUpon>Resources.resx</DependentUpon>
     </Compile>
-    <Compile Include="ToolStripSpringTextBox.cs">
-      <SubType>Component</SubType>
-    </Compile>
     <Service Include="{94E38DFF-614B-4cbd-B67C-F211BB35CE8B}" />
   </ItemGroup>
   <ItemGroup>
@@ -72,6 +69,12 @@
   <ItemGroup>
     <None Include="Resources\plus-white.png" />
   </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\chevron-expand.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\chevron.png" />
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.

Modified: sandbox/maestro-2.5/Maestro.Shared.UI/Properties/Resources.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Shared.UI/Properties/Resources.Designer.cs	2010-05-17 09:29:37 UTC (rev 4893)
+++ sandbox/maestro-2.5/Maestro.Shared.UI/Properties/Resources.Designer.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -60,6 +60,20 @@
             }
         }
         
+        internal static System.Drawing.Bitmap chevron {
+            get {
+                object obj = ResourceManager.GetObject("chevron", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap chevron_expand {
+            get {
+                object obj = ResourceManager.GetObject("chevron-expand", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         internal static System.Drawing.Bitmap minus_white {
             get {
                 object obj = ResourceManager.GetObject("minus-white", resourceCulture);

Modified: sandbox/maestro-2.5/Maestro.Shared.UI/Properties/Resources.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Shared.UI/Properties/Resources.resx	2010-05-17 09:29:37 UTC (rev 4893)
+++ sandbox/maestro-2.5/Maestro.Shared.UI/Properties/Resources.resx	2010-05-17 12:44:09 UTC (rev 4894)
@@ -118,10 +118,16 @@
     <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="plus-white" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\plus-white.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
   <data name="minus-white" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\minus-white.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
-  <data name="plus-white" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\plus-white.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  <data name="chevron-expand" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\chevron-expand.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="chevron" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\chevron.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
 </root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Shared.UI/Resources/chevron-expand.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Shared.UI/Resources/chevron-expand.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Shared.UI/Resources/chevron.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Shared.UI/Resources/chevron.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Deleted: sandbox/maestro-2.5/Maestro.Shared.UI/ToolStripSpringTextBox.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Shared.UI/ToolStripSpringTextBox.cs	2010-05-17 09:29:37 UTC (rev 4893)
+++ sandbox/maestro-2.5/Maestro.Shared.UI/ToolStripSpringTextBox.cs	2010-05-17 12:44:09 UTC (rev 4894)
@@ -1,90 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2010, Jackie Ng
-// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
-// 
-// 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;
-using System.Windows.Forms;
-using System.Drawing;
-
-namespace Maestro.Shared.UI
-{
-    public class ToolStripSpringTextBox : ToolStripTextBox
-    {
-        public override Size GetPreferredSize(Size constrainingSize)
-        {
-            // Use the default size if the text box is on the overflow menu
-            // or is on a vertical ToolStrip.
-            if (IsOnOverflow || Owner.Orientation == Orientation.Vertical)
-            {
-                return DefaultSize;
-            }
-
-            // Declare a variable to store the total available width as 
-            // it is calculated, starting with the display width of the 
-            // owning ToolStrip.
-            Int32 width = Owner.DisplayRectangle.Width;
-
-            // Subtract the width of the overflow button if it is displayed. 
-            if (Owner.OverflowButton.Visible)
-            {
-                width = width - Owner.OverflowButton.Width -
-                    Owner.OverflowButton.Margin.Horizontal;
-            }
-
-            // Declare a variable to maintain a count of ToolStripSpringTextBox 
-            // items currently displayed in the owning ToolStrip. 
-            Int32 springBoxCount = 0;
-
-            foreach (ToolStripItem item in Owner.Items)
-            {
-                // Ignore items on the overflow menu.
-                if (item.IsOnOverflow) continue;
-
-                if (item is ToolStripSpringTextBox)
-                {
-                    // For ToolStripSpringTextBox items, increment the count and 
-                    // subtract the margin width from the total available width.
-                    springBoxCount++;
-                    width -= item.Margin.Horizontal;
-                }
-                else
-                {
-                    // For all other items, subtract the full width from the total
-                    // available width.
-                    width = width - item.Width - item.Margin.Horizontal;
-                }
-            }
-
-            // If there are multiple ToolStripSpringTextBox items in the owning
-            // ToolStrip, divide the total available width between them. 
-            if (springBoxCount > 1) width /= springBoxCount;
-
-            // If the available width is less than the default width, use the
-            // default width, forcing one or more items onto the overflow menu.
-            if (width < DefaultSize.Width) width = DefaultSize.Width;
-
-            // Retrieve the preferred size from the base class, but change the
-            // width to the calculated width. 
-            Size size = base.GetPreferredSize(constrainingSize);
-            size.Width = width;
-            return size;
-        }
-    }
-}



More information about the mapguide-commits mailing list