[mapguide-commits] r5568 - in sandbox/maestro-3.0: Maestro.Base Maestro.Base/Editor Maestro.Editors Maestro.Editors/LayerDefinition Maestro.Editors/LayerDefinition/Raster Maestro.Editors/Properties OSGeo.MapGuide.MaestroAPI/ObjectModels

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Sat Feb 26 11:50:39 EST 2011


Author: jng
Date: 2011-02-26 08:50:39 -0800 (Sat, 26 Feb 2011)
New Revision: 5568

Added:
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerAdvancedSectionCtrl.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerAdvancedSectionCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerAdvancedSectionCtrl.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerSettingsSectionCtrl.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerSettingsSectionCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerSettingsSectionCtrl.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerVisibilitySectionCtrl.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerVisibilitySectionCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerVisibilitySectionCtrl.resx
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/RasterLayerEditorCtrl.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/RasterLayerEditorCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/RasterLayerEditorCtrl.resx
Modified:
   sandbox/maestro-3.0/Maestro.Base/Editor/LayerDefinitionEditor.cs
   sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj
   sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj
   sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx
   sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/GridLayerDefinitionImpl.cs
   sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerInterfaceExtensions.cs
   sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerInterfaces.cs
Log:
Add first cut of Raster Layer Editor ported from Maestro 2.1

Also default to extents of active spatial context when generating previews if the original GetSpatialExtent() call fails, which will be the case for the GDAL raster provider.

Modified: sandbox/maestro-3.0/Maestro.Base/Editor/LayerDefinitionEditor.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Editor/LayerDefinitionEditor.cs	2011-02-26 14:26:56 UTC (rev 5567)
+++ sandbox/maestro-3.0/Maestro.Base/Editor/LayerDefinitionEditor.cs	2011-02-26 16:50:39 UTC (rev 5568)
@@ -64,9 +64,13 @@
                 ed.Dock = DockStyle.Fill;
                 panelBody.Controls.Add(ed);
             }
-            //else if (gl != null)
-            //{
-            //}
+            else if (gl != null)
+            {
+                var ed = new RasterLayerEditorCtrl();
+                ed.Bind(service);
+                ed.Dock = DockStyle.Fill;
+                panelBody.Controls.Add(ed);
+            }
             else if (dl != null)
             {
                 var ed = new DrawingLayerEditorCtrl();

Modified: sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj	2011-02-26 14:26:56 UTC (rev 5567)
+++ sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj	2011-02-26 16:50:39 UTC (rev 5568)
@@ -35,21 +35,21 @@
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\SDK\bin\Release\Aga.Controls.dll</HintPath>
     </Reference>
-    <Reference Include="Maestro.Editors, Version=3.0.0.5334, Culture=neutral, processorArchitecture=MSIL">
+    <Reference Include="Maestro.Editors, Version=3.0.0.5475, Culture=neutral, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\SDK\bin\Release\Maestro.Editors.dll</HintPath>
+      <HintPath>..\SDK\bin\Maestro.Editors.dll</HintPath>
     </Reference>
-    <Reference Include="Maestro.Login, Version=3.0.0.5334, Culture=neutral, processorArchitecture=MSIL">
+    <Reference Include="Maestro.Login, Version=3.0.0.5475, Culture=neutral, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\SDK\bin\Release\Maestro.Login.dll</HintPath>
+      <HintPath>..\SDK\bin\Maestro.Login.dll</HintPath>
     </Reference>
     <Reference Include="Maestro.Packaging, Version=3.0.0.5475, Culture=neutral, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\SDK\bin\Maestro.Packaging.dll</HintPath>
     </Reference>
-    <Reference Include="Maestro.Shared.UI, Version=3.0.0.5334, Culture=neutral, processorArchitecture=MSIL">
+    <Reference Include="Maestro.Shared.UI, Version=3.0.0.5475, Culture=neutral, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\SDK\bin\Release\Maestro.Shared.UI.dll</HintPath>
+      <HintPath>..\SDK\bin\Maestro.Shared.UI.dll</HintPath>
     </Reference>
     <Reference Include="OSGeo.MapGuide.MaestroAPI, Version=3.0.0.5475, Culture=neutral, PublicKeyToken=f526c48929fda856, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerAdvancedSectionCtrl.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerAdvancedSectionCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerAdvancedSectionCtrl.Designer.cs	2011-02-26 16:50:39 UTC (rev 5568)
@@ -0,0 +1,392 @@
+namespace Maestro.Editors.LayerDefinition.Raster
+{
+    partial class RasterLayerAdvancedSectionCtrl
+    {
+        /// <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.chkAdvanced = new System.Windows.Forms.CheckBox();
+            this.txtContrastFactor = new System.Windows.Forms.TextBox();
+            this.txtBrightnessFactor = new System.Windows.Forms.TextBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.cmbTransparencyColor = new Maestro.Editors.Common.ColorComboBox();
+            this.EnableHillshade = new System.Windows.Forms.CheckBox();
+            this.HillshadeGroup = new System.Windows.Forms.GroupBox();
+            this.txtHillshadeBand = new System.Windows.Forms.TextBox();
+            this.txtHillshadeScaleFactor = new System.Windows.Forms.TextBox();
+            this.txtHillshadeAzimuth = new System.Windows.Forms.TextBox();
+            this.txtHillshadeAltitude = new System.Windows.Forms.TextBox();
+            this.label10 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.label9 = new System.Windows.Forms.Label();
+            this.label11 = new System.Windows.Forms.Label();
+            this.EnableSurface = new System.Windows.Forms.CheckBox();
+            this.SurfaceGroup = new System.Windows.Forms.GroupBox();
+            this.cmbSurfaceDefaultColor = new Maestro.Editors.Common.ColorComboBox();
+            this.txtSurfaceBand = new System.Windows.Forms.TextBox();
+            this.txtSurfaceScaleFactor = new System.Windows.Forms.TextBox();
+            this.label12 = new System.Windows.Forms.Label();
+            this.label13 = new System.Windows.Forms.Label();
+            this.label14 = new System.Windows.Forms.Label();
+            this.label15 = new System.Windows.Forms.Label();
+            this.txtSurfaceZeroValue = new System.Windows.Forms.TextBox();
+            this.contentPanel.SuspendLayout();
+            this.HillshadeGroup.SuspendLayout();
+            this.SurfaceGroup.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // contentPanel
+            // 
+            this.contentPanel.Controls.Add(this.EnableSurface);
+            this.contentPanel.Controls.Add(this.SurfaceGroup);
+            this.contentPanel.Controls.Add(this.EnableHillshade);
+            this.contentPanel.Controls.Add(this.HillshadeGroup);
+            this.contentPanel.Controls.Add(this.cmbTransparencyColor);
+            this.contentPanel.Controls.Add(this.txtContrastFactor);
+            this.contentPanel.Controls.Add(this.txtBrightnessFactor);
+            this.contentPanel.Controls.Add(this.label6);
+            this.contentPanel.Controls.Add(this.label5);
+            this.contentPanel.Controls.Add(this.label7);
+            this.contentPanel.Controls.Add(this.chkAdvanced);
+            this.contentPanel.Size = new System.Drawing.Size(449, 364);
+            // 
+            // chkAdvanced
+            // 
+            this.chkAdvanced.AutoSize = true;
+            this.chkAdvanced.Location = new System.Drawing.Point(15, 6);
+            this.chkAdvanced.Name = "chkAdvanced";
+            this.chkAdvanced.Size = new System.Drawing.Size(152, 17);
+            this.chkAdvanced.TabIndex = 0;
+            this.chkAdvanced.Text = "Enable Advanced Settings";
+            this.chkAdvanced.UseVisualStyleBackColor = true;
+            this.chkAdvanced.CheckedChanged += new System.EventHandler(this.chkAdvanced_CheckedChanged);
+            // 
+            // txtContrastFactor
+            // 
+            this.txtContrastFactor.Location = new System.Drawing.Point(159, 58);
+            this.txtContrastFactor.Name = "txtContrastFactor";
+            this.txtContrastFactor.Size = new System.Drawing.Size(104, 20);
+            this.txtContrastFactor.TabIndex = 16;
+            this.txtContrastFactor.Text = "0";
+            this.txtContrastFactor.TextChanged += new System.EventHandler(this.txtContrastFactor_TextChanged);
+            // 
+            // txtBrightnessFactor
+            // 
+            this.txtBrightnessFactor.Location = new System.Drawing.Point(159, 34);
+            this.txtBrightnessFactor.Name = "txtBrightnessFactor";
+            this.txtBrightnessFactor.Size = new System.Drawing.Size(104, 20);
+            this.txtBrightnessFactor.TabIndex = 15;
+            this.txtBrightnessFactor.Text = "0";
+            this.txtBrightnessFactor.TextChanged += new System.EventHandler(this.txtBrightnessFactor_TextChanged);
+            // 
+            // label6
+            // 
+            this.label6.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label6.Location = new System.Drawing.Point(30, 61);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(112, 16);
+            this.label6.TabIndex = 13;
+            this.label6.Text = "Contrast factor";
+            // 
+            // label5
+            // 
+            this.label5.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label5.Location = new System.Drawing.Point(30, 37);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(112, 16);
+            this.label5.TabIndex = 12;
+            this.label5.Text = "Brightness factor";
+            // 
+            // label7
+            // 
+            this.label7.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label7.Location = new System.Drawing.Point(30, 85);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(112, 16);
+            this.label7.TabIndex = 14;
+            this.label7.Text = "Transparency Color";
+            // 
+            // cmbTransparencyColor
+            // 
+            this.cmbTransparencyColor.FormattingEnabled = true;
+            this.cmbTransparencyColor.Location = new System.Drawing.Point(159, 82);
+            this.cmbTransparencyColor.Name = "cmbTransparencyColor";
+            this.cmbTransparencyColor.Size = new System.Drawing.Size(104, 21);
+            this.cmbTransparencyColor.TabIndex = 17;
+            this.cmbTransparencyColor.SelectedIndexChanged += new System.EventHandler(this.cmbTransparencyColor_SelectedIndexChanged);
+            // 
+            // EnableHillshade
+            // 
+            this.EnableHillshade.Checked = true;
+            this.EnableHillshade.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.EnableHillshade.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.EnableHillshade.Location = new System.Drawing.Point(31, 109);
+            this.EnableHillshade.Name = "EnableHillshade";
+            this.EnableHillshade.Size = new System.Drawing.Size(96, 16);
+            this.EnableHillshade.TabIndex = 23;
+            this.EnableHillshade.Text = "Hillshade";
+            this.EnableHillshade.CheckedChanged += new System.EventHandler(this.EnableHillshade_CheckedChanged);
+            // 
+            // HillshadeGroup
+            // 
+            this.HillshadeGroup.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.HillshadeGroup.Controls.Add(this.txtHillshadeBand);
+            this.HillshadeGroup.Controls.Add(this.txtHillshadeScaleFactor);
+            this.HillshadeGroup.Controls.Add(this.txtHillshadeAzimuth);
+            this.HillshadeGroup.Controls.Add(this.txtHillshadeAltitude);
+            this.HillshadeGroup.Controls.Add(this.label10);
+            this.HillshadeGroup.Controls.Add(this.label8);
+            this.HillshadeGroup.Controls.Add(this.label9);
+            this.HillshadeGroup.Controls.Add(this.label11);
+            this.HillshadeGroup.Location = new System.Drawing.Point(15, 109);
+            this.HillshadeGroup.Name = "HillshadeGroup";
+            this.HillshadeGroup.Size = new System.Drawing.Size(419, 120);
+            this.HillshadeGroup.TabIndex = 22;
+            this.HillshadeGroup.TabStop = false;
+            // 
+            // txtHillshadeBand
+            // 
+            this.txtHillshadeBand.Location = new System.Drawing.Point(144, 69);
+            this.txtHillshadeBand.Name = "txtHillshadeBand";
+            this.txtHillshadeBand.Size = new System.Drawing.Size(104, 20);
+            this.txtHillshadeBand.TabIndex = 10;
+            this.txtHillshadeBand.TextChanged += new System.EventHandler(this.txtHillshadeBand_TextChanged);
+            // 
+            // txtHillshadeScaleFactor
+            // 
+            this.txtHillshadeScaleFactor.Location = new System.Drawing.Point(144, 93);
+            this.txtHillshadeScaleFactor.Name = "txtHillshadeScaleFactor";
+            this.txtHillshadeScaleFactor.Size = new System.Drawing.Size(104, 20);
+            this.txtHillshadeScaleFactor.TabIndex = 9;
+            this.txtHillshadeScaleFactor.Text = "0";
+            this.txtHillshadeScaleFactor.TextChanged += new System.EventHandler(this.txtHillshadeScaleFactor_TextChanged);
+            // 
+            // txtHillshadeAzimuth
+            // 
+            this.txtHillshadeAzimuth.Location = new System.Drawing.Point(144, 45);
+            this.txtHillshadeAzimuth.Name = "txtHillshadeAzimuth";
+            this.txtHillshadeAzimuth.Size = new System.Drawing.Size(104, 20);
+            this.txtHillshadeAzimuth.TabIndex = 8;
+            this.txtHillshadeAzimuth.Text = "0";
+            this.txtHillshadeAzimuth.TextChanged += new System.EventHandler(this.txtHillshadeAzimuth_TextChanged);
+            // 
+            // txtHillshadeAltitude
+            // 
+            this.txtHillshadeAltitude.Location = new System.Drawing.Point(144, 21);
+            this.txtHillshadeAltitude.Name = "txtHillshadeAltitude";
+            this.txtHillshadeAltitude.Size = new System.Drawing.Size(104, 20);
+            this.txtHillshadeAltitude.TabIndex = 7;
+            this.txtHillshadeAltitude.Text = "0";
+            this.txtHillshadeAltitude.TextChanged += new System.EventHandler(this.txtHillshadeAltitude_TextChanged);
+            // 
+            // label10
+            // 
+            this.label10.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label10.Location = new System.Drawing.Point(16, 24);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(112, 16);
+            this.label10.TabIndex = 3;
+            this.label10.Text = "Altitude";
+            // 
+            // label8
+            // 
+            this.label8.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label8.Location = new System.Drawing.Point(16, 72);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(112, 16);
+            this.label8.TabIndex = 5;
+            this.label8.Text = "Band";
+            // 
+            // label9
+            // 
+            this.label9.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label9.Location = new System.Drawing.Point(16, 48);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(112, 16);
+            this.label9.TabIndex = 4;
+            this.label9.Text = "Azimuth";
+            // 
+            // label11
+            // 
+            this.label11.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label11.Location = new System.Drawing.Point(16, 96);
+            this.label11.Name = "label11";
+            this.label11.Size = new System.Drawing.Size(112, 16);
+            this.label11.TabIndex = 6;
+            this.label11.Text = "Scale factor";
+            // 
+            // EnableSurface
+            // 
+            this.EnableSurface.Checked = true;
+            this.EnableSurface.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.EnableSurface.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.EnableSurface.Location = new System.Drawing.Point(31, 235);
+            this.EnableSurface.Name = "EnableSurface";
+            this.EnableSurface.Size = new System.Drawing.Size(88, 16);
+            this.EnableSurface.TabIndex = 25;
+            this.EnableSurface.Text = "Surface";
+            this.EnableSurface.CheckedChanged += new System.EventHandler(this.EnableSurface_CheckedChanged);
+            // 
+            // SurfaceGroup
+            // 
+            this.SurfaceGroup.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.SurfaceGroup.Controls.Add(this.cmbSurfaceDefaultColor);
+            this.SurfaceGroup.Controls.Add(this.txtSurfaceBand);
+            this.SurfaceGroup.Controls.Add(this.txtSurfaceScaleFactor);
+            this.SurfaceGroup.Controls.Add(this.label12);
+            this.SurfaceGroup.Controls.Add(this.label13);
+            this.SurfaceGroup.Controls.Add(this.label14);
+            this.SurfaceGroup.Controls.Add(this.label15);
+            this.SurfaceGroup.Controls.Add(this.txtSurfaceZeroValue);
+            this.SurfaceGroup.Location = new System.Drawing.Point(15, 235);
+            this.SurfaceGroup.Name = "SurfaceGroup";
+            this.SurfaceGroup.Size = new System.Drawing.Size(419, 120);
+            this.SurfaceGroup.TabIndex = 24;
+            this.SurfaceGroup.TabStop = false;
+            // 
+            // cmbSurfaceDefaultColor
+            // 
+            this.cmbSurfaceDefaultColor.FormattingEnabled = true;
+            this.cmbSurfaceDefaultColor.Location = new System.Drawing.Point(144, 69);
+            this.cmbSurfaceDefaultColor.Name = "cmbSurfaceDefaultColor";
+            this.cmbSurfaceDefaultColor.Size = new System.Drawing.Size(104, 21);
+            this.cmbSurfaceDefaultColor.TabIndex = 13;
+            this.cmbSurfaceDefaultColor.SelectedIndexChanged += new System.EventHandler(this.cmbSurfaceDefaultColor_SelectedIndexChanged);
+            // 
+            // txtSurfaceBand
+            // 
+            this.txtSurfaceBand.Location = new System.Drawing.Point(144, 21);
+            this.txtSurfaceBand.Name = "txtSurfaceBand";
+            this.txtSurfaceBand.Size = new System.Drawing.Size(104, 20);
+            this.txtSurfaceBand.TabIndex = 12;
+            this.txtSurfaceBand.TextChanged += new System.EventHandler(this.txtSurfaceBand_TextChanged);
+            // 
+            // txtSurfaceScaleFactor
+            // 
+            this.txtSurfaceScaleFactor.Location = new System.Drawing.Point(144, 93);
+            this.txtSurfaceScaleFactor.Name = "txtSurfaceScaleFactor";
+            this.txtSurfaceScaleFactor.Size = new System.Drawing.Size(104, 20);
+            this.txtSurfaceScaleFactor.TabIndex = 11;
+            this.txtSurfaceScaleFactor.Text = "0";
+            this.txtSurfaceScaleFactor.TextChanged += new System.EventHandler(this.txtSurfaceScaleFactor_TextChanged);
+            // 
+            // label12
+            // 
+            this.label12.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label12.Location = new System.Drawing.Point(16, 24);
+            this.label12.Name = "label12";
+            this.label12.Size = new System.Drawing.Size(112, 16);
+            this.label12.TabIndex = 3;
+            this.label12.Text = "Band";
+            // 
+            // label13
+            // 
+            this.label13.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label13.Location = new System.Drawing.Point(16, 72);
+            this.label13.Name = "label13";
+            this.label13.Size = new System.Drawing.Size(112, 16);
+            this.label13.TabIndex = 5;
+            this.label13.Text = "Default color";
+            // 
+            // label14
+            // 
+            this.label14.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label14.Location = new System.Drawing.Point(16, 48);
+            this.label14.Name = "label14";
+            this.label14.Size = new System.Drawing.Size(112, 16);
+            this.label14.TabIndex = 4;
+            this.label14.Text = "Zero value";
+            // 
+            // label15
+            // 
+            this.label15.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label15.Location = new System.Drawing.Point(16, 96);
+            this.label15.Name = "label15";
+            this.label15.Size = new System.Drawing.Size(112, 16);
+            this.label15.TabIndex = 6;
+            this.label15.Text = "Scale factor";
+            // 
+            // txtSurfaceZeroValue
+            // 
+            this.txtSurfaceZeroValue.Location = new System.Drawing.Point(144, 45);
+            this.txtSurfaceZeroValue.Name = "txtSurfaceZeroValue";
+            this.txtSurfaceZeroValue.Size = new System.Drawing.Size(104, 20);
+            this.txtSurfaceZeroValue.TabIndex = 10;
+            this.txtSurfaceZeroValue.Text = "0";
+            this.txtSurfaceZeroValue.TextChanged += new System.EventHandler(this.txtSurfaceZeroValue_TextChanged);
+            // 
+            // RasterLayerAdvancedSectionCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.HeaderText = "Advanced Settings";
+            this.Name = "RasterLayerAdvancedSectionCtrl";
+            this.Size = new System.Drawing.Size(449, 391);
+            this.contentPanel.ResumeLayout(false);
+            this.contentPanel.PerformLayout();
+            this.HillshadeGroup.ResumeLayout(false);
+            this.HillshadeGroup.PerformLayout();
+            this.SurfaceGroup.ResumeLayout(false);
+            this.SurfaceGroup.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.TextBox txtContrastFactor;
+        private System.Windows.Forms.TextBox txtBrightnessFactor;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.CheckBox chkAdvanced;
+        private System.Windows.Forms.CheckBox EnableSurface;
+        private System.Windows.Forms.GroupBox SurfaceGroup;
+        private System.Windows.Forms.TextBox txtSurfaceBand;
+        private System.Windows.Forms.TextBox txtSurfaceScaleFactor;
+        private System.Windows.Forms.Label label12;
+        private System.Windows.Forms.Label label13;
+        private System.Windows.Forms.Label label14;
+        private System.Windows.Forms.Label label15;
+        private System.Windows.Forms.TextBox txtSurfaceZeroValue;
+        private System.Windows.Forms.CheckBox EnableHillshade;
+        private System.Windows.Forms.GroupBox HillshadeGroup;
+        private System.Windows.Forms.TextBox txtHillshadeBand;
+        private System.Windows.Forms.TextBox txtHillshadeScaleFactor;
+        private System.Windows.Forms.TextBox txtHillshadeAzimuth;
+        private System.Windows.Forms.TextBox txtHillshadeAltitude;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.Label label11;
+        private Maestro.Editors.Common.ColorComboBox cmbTransparencyColor;
+        private Maestro.Editors.Common.ColorComboBox cmbSurfaceDefaultColor;
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerAdvancedSectionCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerAdvancedSectionCtrl.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerAdvancedSectionCtrl.cs	2011-02-26 16:50:39 UTC (rev 5568)
@@ -0,0 +1,315 @@
+#region Disclaimer / License
+// Copyright (C) 2011, 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.Editors.Common;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using OSGeo.MapGuide.MaestroAPI;
+
+namespace Maestro.Editors.LayerDefinition.Raster
+{
+    [ToolboxItem(true)]
+    public partial class RasterLayerAdvancedSectionCtrl : EditorBindableCollapsiblePanel
+    {
+        public RasterLayerAdvancedSectionCtrl()
+        {
+            InitializeComponent();
+            cmbTransparencyColor.ResetColors();
+            cmbSurfaceDefaultColor.ResetColors();
+        }
+
+        private IEditorService _edsvc;
+        private IRasterLayerDefinition _rl;
+        private IGridScaleRange _activeRange;
+
+        private IGridColorStyle _colorStyle;
+        private IGridSurfaceStyle _surfaceStyle;
+        private IHillShade _hillShade;
+
+        private bool _init = false;
+
+        public override void Bind(IEditorService service)
+        {
+            _init = true;
+            try
+            {
+                _edsvc = service;
+                _rl = (IRasterLayerDefinition)((ILayerDefinition)service.GetEditedResource()).SubLayer;
+                _edsvc.RegisterCustomNotifier(this);
+
+                //Set active range. There has to be one!
+                _activeRange = _rl.GetScaleRangeAt(0);
+
+                //Assign color style. If this range has none, we'll create
+                //one and assign that. Changing the checkbox will attach/detach
+                //this object
+                if (_activeRange.ColorStyle == null)
+                    _colorStyle = _activeRange.CreateColorStyle();
+                else
+                    _colorStyle = _activeRange.ColorStyle;
+
+                //Assign surface style. If this range has none, we'll create
+                //one and assign that. Changing the checkbox will attach/detach
+                //this object
+                if (_activeRange.SurfaceStyle == null)
+                    _surfaceStyle = _activeRange.CreateSurfaceStyle();
+                else
+                    _surfaceStyle = _activeRange.SurfaceStyle;
+
+                if (_colorStyle.HillShade == null)
+                    _hillShade = _colorStyle.CreateHillShade();
+                else
+                    _hillShade = _colorStyle.HillShade;
+
+                txtBrightnessFactor.Text = _colorStyle.BrightnessFactor.HasValue ? _colorStyle.BrightnessFactor.Value.ToString() : "0";
+                txtContrastFactor.Text = _colorStyle.ContrastFactor.HasValue ? _colorStyle.ContrastFactor.Value.ToString() : "0";
+
+                if (!string.IsNullOrEmpty(_colorStyle.TransparencyColor))
+                {
+                    cmbTransparencyColor.CurrentColor = Utility.ParseHTMLColor(_colorStyle.TransparencyColor);
+                }
+
+                txtHillshadeAltitude.Text = _hillShade.Altitude.ToString();
+                txtHillshadeAzimuth.Text = _hillShade.Azimuth.ToString();
+                txtHillshadeBand.Text = _hillShade.Band;
+                txtHillshadeScaleFactor.Text = _hillShade.ScaleFactor.ToString();
+
+                txtSurfaceBand.Text = _surfaceStyle.Band;
+                txtSurfaceScaleFactor.Text = _surfaceStyle.ScaleFactor.ToString();
+                txtSurfaceZeroValue.Text = _surfaceStyle.ZeroValue.ToString();
+
+                if (!string.IsNullOrEmpty(_surfaceStyle.DefaultColor))
+                    cmbSurfaceDefaultColor.CurrentColor = Utility.ParseHTMLColor(_surfaceStyle.DefaultColor);
+
+                chkAdvanced.Checked = _colorStyle.ContrastFactor.HasValue && _colorStyle.BrightnessFactor.HasValue && !string.IsNullOrEmpty(_colorStyle.TransparencyColor);
+                txtBrightnessFactor.Enabled = txtContrastFactor.Enabled = cmbTransparencyColor.Enabled = chkAdvanced.Checked;
+                EnableSurface.Checked = (_activeRange.SurfaceStyle != null);
+                EnableHillshade.Checked = (_colorStyle.HillShade != null);
+            }
+            finally
+            {
+                _init = false;
+            }
+        }
+
+        private void chkAdvanced_CheckedChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            if (chkAdvanced.Checked)
+            {
+                txtBrightnessFactor.Enabled = txtContrastFactor.Enabled = cmbTransparencyColor.Enabled = true;
+                try
+                {
+                    _init = true;
+                    //Restore values from UI fields
+                    txtBrightnessFactor_TextChanged(this, EventArgs.Empty);
+                    txtContrastFactor_TextChanged(this, EventArgs.Empty);
+                    cmbTransparencyColor_SelectedIndexChanged(this, EventArgs.Empty);
+                    //Check if attached
+                    EnableSurface.Checked = (_activeRange.SurfaceStyle != null);
+                    EnableHillshade.Checked = (_colorStyle.HillShade != null);
+                }
+                finally { _init = false; }
+            }
+            else
+            {
+                _init = true;
+                _colorStyle.BrightnessFactor = null;
+                _colorStyle.ContrastFactor = null;
+                _colorStyle.TransparencyColor = null;
+
+                txtBrightnessFactor.Enabled = txtContrastFactor.Enabled = cmbTransparencyColor.Enabled = false;
+                //Detach
+                EnableSurface.Checked = false;
+                EnableHillshade.Checked = false;
+            }
+        }
+
+        private void EnableHillshade_CheckedChanged(object sender, EventArgs e)
+        {
+            HillshadeGroup.Enabled = EnableHillshade.Checked;
+
+            if (_init)
+                return;
+
+            if (HillshadeGroup.Enabled)
+            {
+                _colorStyle.HillShade = _hillShade;
+            }
+            else
+            {
+                _colorStyle.HillShade = null;
+            }
+        }
+
+        private void EnableSurface_CheckedChanged(object sender, EventArgs e)
+        {
+            SurfaceGroup.Enabled = EnableSurface.Checked;
+
+            if (_init)
+                return;
+
+            if (SurfaceGroup.Enabled)
+            {
+                _activeRange.SurfaceStyle = _surfaceStyle;
+            }
+            else
+            {
+                _activeRange.SurfaceStyle = null;
+            }
+        }
+
+        private void txtBrightnessFactor_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            double d;
+            if (double.TryParse(txtBrightnessFactor.Text, out d))
+                _colorStyle.BrightnessFactor = d;
+            else
+                _colorStyle.BrightnessFactor = null;
+
+            OnResourceChanged();
+        }
+
+        private void txtContrastFactor_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            double d;
+            if (double.TryParse(txtContrastFactor.Text, out d))
+                _colorStyle.ContrastFactor = d;
+            else
+                _colorStyle.ContrastFactor = null;
+
+            OnResourceChanged();
+        }
+
+        private void cmbTransparencyColor_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            _colorStyle.TransparencyColor = Utility.SerializeHTMLColor(cmbTransparencyColor.CurrentColor, false);
+            OnResourceChanged();
+        }
+
+        private void txtHillshadeAltitude_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            double d;
+            if (double.TryParse(txtHillshadeAltitude.Text, out d))
+            {
+                _hillShade.Altitude = d;
+                OnResourceChanged();
+            }
+        }
+
+        private void txtHillshadeAzimuth_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            double d;
+            if (double.TryParse(txtHillshadeAzimuth.Text, out d))
+            {
+                _hillShade.Azimuth = d;
+                OnResourceChanged();
+            }
+        }
+
+        private void txtHillshadeBand_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            _hillShade.Band = txtHillshadeBand.Text;
+            OnResourceChanged();
+        }
+
+        private void txtHillshadeScaleFactor_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            double d;
+            if (double.TryParse(txtHillshadeScaleFactor.Text, out d))
+            {
+                _hillShade.ScaleFactor = d;
+                OnResourceChanged();
+            }
+        }
+
+        private void txtSurfaceBand_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            _surfaceStyle.Band = txtSurfaceBand.Text;
+            OnResourceChanged();
+        }
+
+        private void txtSurfaceZeroValue_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            double d;
+            if (double.TryParse(txtSurfaceZeroValue.Text, out d))
+            {
+                _surfaceStyle.ZeroValue = d;
+                OnResourceChanged();
+            }
+        }
+
+        private void cmbSurfaceDefaultColor_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            _surfaceStyle.DefaultColor = Utility.SerializeHTMLColor(cmbSurfaceDefaultColor.CurrentColor, false);
+            OnResourceChanged();
+        }
+
+        private void txtSurfaceScaleFactor_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            double d;
+            if (double.TryParse(txtSurfaceScaleFactor.Text, out d))
+            {
+                _surfaceStyle.ScaleFactor = d;
+                OnResourceChanged();
+            }
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerAdvancedSectionCtrl.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerAdvancedSectionCtrl.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerAdvancedSectionCtrl.resx	2011-02-26 16:50:39 UTC (rev 5568)
@@ -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-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerSettingsSectionCtrl.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerSettingsSectionCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerSettingsSectionCtrl.Designer.cs	2011-02-26 16:50:39 UTC (rev 5568)
@@ -0,0 +1,147 @@
+namespace Maestro.Editors.LayerDefinition.Raster
+{
+    partial class RasterLayerSettingsSectionCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RasterLayerSettingsSectionCtrl));
+            this.grpFeatureClass = new System.Windows.Forms.GroupBox();
+            this.btnBrowseGeometry = new System.Windows.Forms.Button();
+            this.label3 = new System.Windows.Forms.Label();
+            this.btnBrowseSchema = new System.Windows.Forms.Button();
+            this.label2 = new System.Windows.Forms.Label();
+            this.txtGeometry = new System.Windows.Forms.TextBox();
+            this.txtFeatureClass = new System.Windows.Forms.TextBox();
+            this.btnBrowseFeatureSource = new System.Windows.Forms.Button();
+            this.txtFeatureSource = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.contentPanel.SuspendLayout();
+            this.grpFeatureClass.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // contentPanel
+            // 
+            this.contentPanel.Controls.Add(this.grpFeatureClass);
+            this.contentPanel.Controls.Add(this.txtFeatureSource);
+            this.contentPanel.Controls.Add(this.btnBrowseFeatureSource);
+            this.contentPanel.Controls.Add(this.label1);
+            resources.ApplyResources(this.contentPanel, "contentPanel");
+            // 
+            // grpFeatureClass
+            // 
+            resources.ApplyResources(this.grpFeatureClass, "grpFeatureClass");
+            this.grpFeatureClass.Controls.Add(this.btnBrowseGeometry);
+            this.grpFeatureClass.Controls.Add(this.label3);
+            this.grpFeatureClass.Controls.Add(this.btnBrowseSchema);
+            this.grpFeatureClass.Controls.Add(this.label2);
+            this.grpFeatureClass.Controls.Add(this.txtGeometry);
+            this.grpFeatureClass.Controls.Add(this.txtFeatureClass);
+            this.grpFeatureClass.Name = "grpFeatureClass";
+            this.grpFeatureClass.TabStop = false;
+            // 
+            // btnBrowseGeometry
+            // 
+            resources.ApplyResources(this.btnBrowseGeometry, "btnBrowseGeometry");
+            this.btnBrowseGeometry.Name = "btnBrowseGeometry";
+            this.btnBrowseGeometry.UseVisualStyleBackColor = true;
+            this.btnBrowseGeometry.Click += new System.EventHandler(this.btnBrowseGeometry_Click);
+            // 
+            // label3
+            // 
+            resources.ApplyResources(this.label3, "label3");
+            this.label3.Name = "label3";
+            // 
+            // btnBrowseSchema
+            // 
+            resources.ApplyResources(this.btnBrowseSchema, "btnBrowseSchema");
+            this.btnBrowseSchema.Name = "btnBrowseSchema";
+            this.btnBrowseSchema.UseVisualStyleBackColor = true;
+            this.btnBrowseSchema.Click += new System.EventHandler(this.btnBrowseSchema_Click);
+            // 
+            // label2
+            // 
+            resources.ApplyResources(this.label2, "label2");
+            this.label2.Name = "label2";
+            // 
+            // txtGeometry
+            // 
+            resources.ApplyResources(this.txtGeometry, "txtGeometry");
+            this.txtGeometry.Name = "txtGeometry";
+            this.txtGeometry.ReadOnly = true;
+            // 
+            // txtFeatureClass
+            // 
+            resources.ApplyResources(this.txtFeatureClass, "txtFeatureClass");
+            this.txtFeatureClass.Name = "txtFeatureClass";
+            this.txtFeatureClass.ReadOnly = true;
+            // 
+            // btnBrowseFeatureSource
+            // 
+            resources.ApplyResources(this.btnBrowseFeatureSource, "btnBrowseFeatureSource");
+            this.btnBrowseFeatureSource.Name = "btnBrowseFeatureSource";
+            this.btnBrowseFeatureSource.UseVisualStyleBackColor = true;
+            this.btnBrowseFeatureSource.Click += new System.EventHandler(this.btnBrowseFeatureSource_Click);
+            // 
+            // txtFeatureSource
+            // 
+            resources.ApplyResources(this.txtFeatureSource, "txtFeatureSource");
+            this.txtFeatureSource.Name = "txtFeatureSource";
+            this.txtFeatureSource.ReadOnly = true;
+            // 
+            // label1
+            // 
+            resources.ApplyResources(this.label1, "label1");
+            this.label1.Name = "label1";
+            // 
+            // RasterLayerSettingsSectionCtrl
+            // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            this.HeaderText = "Feature Source Settings";
+            this.Name = "RasterLayerSettingsSectionCtrl";
+            resources.ApplyResources(this, "$this");
+            this.contentPanel.ResumeLayout(false);
+            this.contentPanel.PerformLayout();
+            this.grpFeatureClass.ResumeLayout(false);
+            this.grpFeatureClass.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.GroupBox grpFeatureClass;
+        private System.Windows.Forms.Button btnBrowseGeometry;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Button btnBrowseSchema;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox txtGeometry;
+        private System.Windows.Forms.TextBox txtFeatureClass;
+        private System.Windows.Forms.TextBox txtFeatureSource;
+        private System.Windows.Forms.Button btnBrowseFeatureSource;
+        private System.Windows.Forms.Label label1;
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerSettingsSectionCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerSettingsSectionCtrl.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerSettingsSectionCtrl.cs	2011-02-26 16:50:39 UTC (rev 5568)
@@ -0,0 +1,197 @@
+#region Disclaimer / License
+// Copyright (C) 2011, 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.Editors.Common;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using System.Diagnostics;
+using Maestro.Editors.Generic;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.MaestroAPI.Schema;
+using OSGeo.MapGuide.ObjectModels.FeatureSource;
+using Maestro.Shared.UI;
+
+namespace Maestro.Editors.LayerDefinition.Raster
+{
+    [ToolboxItem(true)]
+    public partial class RasterLayerSettingsSectionCtrl : EditorBindableCollapsiblePanel
+    {
+        public RasterLayerSettingsSectionCtrl()
+        {
+            InitializeComponent();
+        }
+
+        private IEditorService _edsvc;
+        private IRasterLayerDefinition _rl;
+
+        public override void Bind(IEditorService service)
+        {
+            _edsvc = service;
+            _edsvc.RegisterCustomNotifier(this);
+
+            var res = service.GetEditedResource() as ILayerDefinition;
+            Debug.Assert(res != null);
+
+            _rl = res.SubLayer as IRasterLayerDefinition;
+            Debug.Assert(_rl != null);
+
+            TextBoxBinder.BindText(txtFeatureSource, _rl, "ResourceId");
+
+            TextBoxBinder.BindText(txtFeatureClass, _rl, "FeatureName");
+            TextBoxBinder.BindText(txtGeometry, _rl, "Geometry");
+        }
+
+        private FeatureSourceDescription _cachedDesc;
+
+        protected override void OnLoad(EventArgs e)
+        {
+            //Init cached schemas and selected class
+            if (!string.IsNullOrEmpty(txtFeatureClass.Text))
+            {
+                if (_cachedDesc == null)
+                    _cachedDesc = _edsvc.FeatureService.DescribeFeatureSource(txtFeatureSource.Text);
+
+                var cls = _cachedDesc.GetClass(txtFeatureClass.Text);
+                if (cls != null)
+                {
+                    _selectedClass = cls;
+                }
+            }
+        }
+
+        private void btnBrowseFeatureSource_Click(object sender, EventArgs e)
+        {
+            var picker = new ResourcePicker(_edsvc.ResourceService, ResourceTypes.FeatureSource, ResourcePickerMode.OpenResource);
+            if (picker.ShowDialog() == DialogResult.OK)
+            {
+                txtFeatureSource.Text = picker.ResourceID;
+                //Invalidate
+                _cachedFs = null;
+            }
+        }
+
+        private void btnBrowseSchema_Click(object sender, EventArgs e)
+        {
+            var list = new List<ClassDefinition>();
+            foreach (var cls in _cachedDesc.AllClasses)
+            {
+                bool hasRaster = false;
+                foreach (var prop in cls.Properties)
+                {
+                    var rp = prop as RasterPropertyDefinition;
+                    if (rp != null)
+                    {
+                        hasRaster = true;
+                        break;
+                    }
+                }
+
+                if (hasRaster)
+                    list.Add(cls);
+            }
+            if (list.Count == 0)
+            {
+                MessageBox.Show(Properties.Resources.NoRasterClasses);
+                return;
+            }
+
+            var item = GenericItemSelectionDialog.SelectItem(null, null, list.ToArray(), "QualifiedName", "QualifiedName");
+            if (item != null)
+            {
+                txtFeatureClass.Text = item.QualifiedName;
+                _selectedClass = item;
+
+                //See if geometry needs invalidation
+                bool invalidate = true;
+                foreach (var col in item.Properties)
+                {
+                    if (col.Type == PropertyDefinitionType.Raster && col.Name.Equals(txtGeometry.Text))
+                    {
+                        invalidate = false;
+                        break;
+                    }
+                }
+                if (invalidate)
+                {
+                    txtGeometry.Text = string.Empty;
+                }
+
+                //See if we can auto-assign geometry
+                List<PropertyDefinition> geoms = new List<PropertyDefinition>();
+                foreach (var col in _selectedClass.Properties)
+                {
+                    if (col.Type == PropertyDefinitionType.Raster)
+                        geoms.Add(col);
+                }
+
+                if (geoms.Count == 1)
+                    txtGeometry.Text = geoms[0].Name;
+
+                //OnFeatureClassChanged();
+            }
+        }
+
+        private void btnBrowseGeometry_Click(object sender, EventArgs e)
+        {
+            if (_selectedClass != null)
+            {
+                List<PropertyDefinition> geoms = new List<PropertyDefinition>();
+                foreach (var col in _selectedClass.Properties)
+                {
+                    if (col.Type == PropertyDefinitionType.Raster)
+                        geoms.Add(col);
+                }
+
+                var item = GenericItemSelectionDialog.SelectItem(null, null, geoms.ToArray(), "Name", "Name");
+                if (item != null)
+                {
+                    txtGeometry.Text = item.Name;
+                }
+            }
+        }
+
+        internal string FeatureSourceID
+        {
+            get { return txtFeatureSource.Text; }
+        }
+
+        private ClassDefinition _selectedClass;
+
+        internal ClassDefinition GetSelectedClass()
+        {
+            return _selectedClass;
+        }
+
+        private IFeatureSource _cachedFs;
+
+        private IFeatureSource GetFeatureSource()
+        {
+            if (_cachedFs == null)
+                _cachedFs = (IFeatureSource)_edsvc.ResourceService.GetResource(txtFeatureSource.Text);
+
+            return _cachedFs;
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerSettingsSectionCtrl.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerSettingsSectionCtrl.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerSettingsSectionCtrl.resx	2011-02-26 16:50:39 UTC (rev 5568)
@@ -0,0 +1,429 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="grpFeatureClass.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="btnBrowseGeometry.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Right</value>
+  </data>
+  <data name="btnBrowseGeometry.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="btnBrowseGeometry.Location" type="System.Drawing.Point, System.Drawing">
+    <value>377, 42</value>
+  </data>
+  <data name="btnBrowseGeometry.Size" type="System.Drawing.Size, System.Drawing">
+    <value>30, 23</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="btnBrowseGeometry.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name="btnBrowseGeometry.Text" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseGeometry.Name" xml:space="preserve">
+    <value>btnBrowseGeometry</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseGeometry.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseGeometry.Parent" xml:space="preserve">
+    <value>grpFeatureClass</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseGeometry.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="label3.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>15, 47</value>
+  </data>
+  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>94, 13</value>
+  </data>
+  <data name="label3.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="label3.Text" xml:space="preserve">
+    <value>Geometry Property</value>
+  </data>
+  <data name="&gt;&gt;label3.Name" xml:space="preserve">
+    <value>label3</value>
+  </data>
+  <data name="&gt;&gt;label3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label3.Parent" xml:space="preserve">
+    <value>grpFeatureClass</value>
+  </data>
+  <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="btnBrowseSchema.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Right</value>
+  </data>
+  <data name="btnBrowseSchema.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="btnBrowseSchema.Location" type="System.Drawing.Point, System.Drawing">
+    <value>377, 17</value>
+  </data>
+  <data name="btnBrowseSchema.Size" type="System.Drawing.Size, System.Drawing">
+    <value>30, 23</value>
+  </data>
+  <data name="btnBrowseSchema.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name="btnBrowseSchema.Text" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseSchema.Name" xml:space="preserve">
+    <value>btnBrowseSchema</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseSchema.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseSchema.Parent" xml:space="preserve">
+    <value>grpFeatureClass</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseSchema.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="label2.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>15, 22</value>
+  </data>
+  <data name="label2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>71, 13</value>
+  </data>
+  <data name="label2.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="label2.Text" xml:space="preserve">
+    <value>Feature Class</value>
+  </data>
+  <data name="&gt;&gt;label2.Name" xml:space="preserve">
+    <value>label2</value>
+  </data>
+  <data name="&gt;&gt;label2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label2.Parent" xml:space="preserve">
+    <value>grpFeatureClass</value>
+  </data>
+  <data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="txtGeometry.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="txtGeometry.Location" type="System.Drawing.Point, System.Drawing">
+    <value>121, 44</value>
+  </data>
+  <data name="txtGeometry.Size" type="System.Drawing.Size, System.Drawing">
+    <value>250, 20</value>
+  </data>
+  <data name="txtGeometry.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="&gt;&gt;txtGeometry.Name" xml:space="preserve">
+    <value>txtGeometry</value>
+  </data>
+  <data name="&gt;&gt;txtGeometry.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;txtGeometry.Parent" xml:space="preserve">
+    <value>grpFeatureClass</value>
+  </data>
+  <data name="&gt;&gt;txtGeometry.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="txtFeatureClass.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="txtFeatureClass.Location" type="System.Drawing.Point, System.Drawing">
+    <value>121, 19</value>
+  </data>
+  <data name="txtFeatureClass.Size" type="System.Drawing.Size, System.Drawing">
+    <value>250, 20</value>
+  </data>
+  <data name="txtFeatureClass.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="&gt;&gt;txtFeatureClass.Name" xml:space="preserve">
+    <value>txtFeatureClass</value>
+  </data>
+  <data name="&gt;&gt;txtFeatureClass.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;txtFeatureClass.Parent" xml:space="preserve">
+    <value>grpFeatureClass</value>
+  </data>
+  <data name="&gt;&gt;txtFeatureClass.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="grpFeatureClass.Location" type="System.Drawing.Point, System.Drawing">
+    <value>15, 33</value>
+  </data>
+  <data name="grpFeatureClass.Size" type="System.Drawing.Size, System.Drawing">
+    <value>423, 74</value>
+  </data>
+  <data name="grpFeatureClass.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="grpFeatureClass.Text" xml:space="preserve">
+    <value>Feature Class</value>
+  </data>
+  <data name="&gt;&gt;grpFeatureClass.Name" xml:space="preserve">
+    <value>grpFeatureClass</value>
+  </data>
+  <data name="&gt;&gt;grpFeatureClass.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;grpFeatureClass.Parent" xml:space="preserve">
+    <value>contentPanel</value>
+  </data>
+  <data name="&gt;&gt;grpFeatureClass.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="txtFeatureSource.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="txtFeatureSource.Location" type="System.Drawing.Point, System.Drawing">
+    <value>112, 6</value>
+  </data>
+  <data name="txtFeatureSource.Size" type="System.Drawing.Size, System.Drawing">
+    <value>288, 20</value>
+  </data>
+  <data name="txtFeatureSource.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;txtFeatureSource.Name" xml:space="preserve">
+    <value>txtFeatureSource</value>
+  </data>
+  <data name="&gt;&gt;txtFeatureSource.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;txtFeatureSource.Parent" xml:space="preserve">
+    <value>contentPanel</value>
+  </data>
+  <data name="&gt;&gt;txtFeatureSource.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="btnBrowseFeatureSource.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Right</value>
+  </data>
+  <data name="btnBrowseFeatureSource.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="btnBrowseFeatureSource.Location" type="System.Drawing.Point, System.Drawing">
+    <value>406, 4</value>
+  </data>
+  <data name="btnBrowseFeatureSource.Size" type="System.Drawing.Size, System.Drawing">
+    <value>32, 23</value>
+  </data>
+  <data name="btnBrowseFeatureSource.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="btnBrowseFeatureSource.Text" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseFeatureSource.Name" xml:space="preserve">
+    <value>btnBrowseFeatureSource</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseFeatureSource.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseFeatureSource.Parent" xml:space="preserve">
+    <value>contentPanel</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseFeatureSource.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="label1.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 9</value>
+  </data>
+  <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>80, 13</value>
+  </data>
+  <data name="label1.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="label1.Text" xml:space="preserve">
+    <value>Feature Source</value>
+  </data>
+  <data name="&gt;&gt;label1.Name" xml:space="preserve">
+    <value>label1</value>
+  </data>
+  <data name="&gt;&gt;label1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label1.Parent" xml:space="preserve">
+    <value>contentPanel</value>
+  </data>
+  <data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="contentPanel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>449, 118</value>
+  </data>
+  <data name="&gt;&gt;contentPanel.Name" xml:space="preserve">
+    <value>contentPanel</value>
+  </data>
+  <data name="&gt;&gt;contentPanel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;contentPanel.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;contentPanel.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>449, 145</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>RasterLayerSettingsSectionCtrl</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>Maestro.Editors.Common.EditorBindableCollapsiblePanel, Maestro.Editors, Version=3.0.0.5475, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerVisibilitySectionCtrl.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerVisibilitySectionCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerVisibilitySectionCtrl.Designer.cs	2011-02-26 16:50:39 UTC (rev 5568)
@@ -0,0 +1,155 @@
+namespace Maestro.Editors.LayerDefinition.Raster
+{
+    partial class RasterLayerVisibilitySectionCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RasterLayerVisibilitySectionCtrl));
+            this.txtRebuildFactor = new System.Windows.Forms.TextBox();
+            this.RebuildThreshold = new System.Windows.Forms.Label();
+            this.cmbVisibleTo = new System.Windows.Forms.ComboBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.txtVisibleFrom = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.cmbBackgroundColor = new Maestro.Editors.Common.ColorComboBox();
+            this.cmbForegroundColor = new Maestro.Editors.Common.ColorComboBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.contentPanel.SuspendLayout();
+            this.groupBox1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // contentPanel
+            // 
+            this.contentPanel.Controls.Add(this.groupBox1);
+            this.contentPanel.Controls.Add(this.txtRebuildFactor);
+            this.contentPanel.Controls.Add(this.RebuildThreshold);
+            this.contentPanel.Controls.Add(this.cmbVisibleTo);
+            this.contentPanel.Controls.Add(this.label2);
+            this.contentPanel.Controls.Add(this.txtVisibleFrom);
+            this.contentPanel.Controls.Add(this.label1);
+            resources.ApplyResources(this.contentPanel, "contentPanel");
+            // 
+            // txtRebuildFactor
+            // 
+            resources.ApplyResources(this.txtRebuildFactor, "txtRebuildFactor");
+            this.txtRebuildFactor.Name = "txtRebuildFactor";
+            this.txtRebuildFactor.TextChanged += new System.EventHandler(this.txtRebuildFactor_TextChanged);
+            // 
+            // RebuildThreshold
+            // 
+            resources.ApplyResources(this.RebuildThreshold, "RebuildThreshold");
+            this.RebuildThreshold.Name = "RebuildThreshold";
+            // 
+            // cmbVisibleTo
+            // 
+            resources.ApplyResources(this.cmbVisibleTo, "cmbVisibleTo");
+            this.cmbVisibleTo.Items.AddRange(new object[] {
+            resources.GetString("cmbVisibleTo.Items")});
+            this.cmbVisibleTo.Name = "cmbVisibleTo";
+            this.cmbVisibleTo.SelectedIndexChanged += new System.EventHandler(this.cmbVisibleTo_SelectedIndexChanged);
+            this.cmbVisibleTo.TextChanged += new System.EventHandler(this.cmbVisibleTo_TextChanged);
+            // 
+            // label2
+            // 
+            resources.ApplyResources(this.label2, "label2");
+            this.label2.Name = "label2";
+            // 
+            // txtVisibleFrom
+            // 
+            resources.ApplyResources(this.txtVisibleFrom, "txtVisibleFrom");
+            this.txtVisibleFrom.Name = "txtVisibleFrom";
+            this.txtVisibleFrom.TextChanged += new System.EventHandler(this.txtVisibleFrom_TextChanged);
+            // 
+            // label1
+            // 
+            resources.ApplyResources(this.label1, "label1");
+            this.label1.Name = "label1";
+            // 
+            // groupBox1
+            // 
+            resources.ApplyResources(this.groupBox1, "groupBox1");
+            this.groupBox1.Controls.Add(this.cmbBackgroundColor);
+            this.groupBox1.Controls.Add(this.cmbForegroundColor);
+            this.groupBox1.Controls.Add(this.label4);
+            this.groupBox1.Controls.Add(this.label3);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.TabStop = false;
+            // 
+            // cmbBackgroundColor
+            // 
+            this.cmbBackgroundColor.FormattingEnabled = true;
+            resources.ApplyResources(this.cmbBackgroundColor, "cmbBackgroundColor");
+            this.cmbBackgroundColor.Name = "cmbBackgroundColor";
+            this.cmbBackgroundColor.SelectedIndexChanged += new System.EventHandler(this.cmbBackgroundColor_SelectedIndexChanged);
+            // 
+            // cmbForegroundColor
+            // 
+            this.cmbForegroundColor.FormattingEnabled = true;
+            resources.ApplyResources(this.cmbForegroundColor, "cmbForegroundColor");
+            this.cmbForegroundColor.Name = "cmbForegroundColor";
+            this.cmbForegroundColor.SelectedIndexChanged += new System.EventHandler(this.cmbForegroundColor_SelectedIndexChanged);
+            // 
+            // label4
+            // 
+            resources.ApplyResources(this.label4, "label4");
+            this.label4.Name = "label4";
+            // 
+            // label3
+            // 
+            resources.ApplyResources(this.label3, "label3");
+            this.label3.Name = "label3";
+            // 
+            // RasterLayerVisibilitySectionCtrl
+            // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            this.HeaderText = "Layer Visbility";
+            this.Name = "RasterLayerVisibilitySectionCtrl";
+            resources.ApplyResources(this, "$this");
+            this.contentPanel.ResumeLayout(false);
+            this.contentPanel.PerformLayout();
+            this.groupBox1.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.TextBox txtRebuildFactor;
+        private System.Windows.Forms.Label RebuildThreshold;
+        private System.Windows.Forms.ComboBox cmbVisibleTo;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox txtVisibleFrom;
+        private System.Windows.Forms.Label label1;
+        private Maestro.Editors.Common.ColorComboBox cmbBackgroundColor;
+        private Maestro.Editors.Common.ColorComboBox cmbForegroundColor;
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerVisibilitySectionCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerVisibilitySectionCtrl.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerVisibilitySectionCtrl.cs	2011-02-26 16:50:39 UTC (rev 5568)
@@ -0,0 +1,159 @@
+#region Disclaimer / License
+// Copyright (C) 2011, 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.Editors.Common;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using System.Globalization;
+using OSGeo.MapGuide.MaestroAPI;
+
+namespace Maestro.Editors.LayerDefinition.Raster
+{
+    [ToolboxItem(true)]
+    public partial class RasterLayerVisibilitySectionCtrl : EditorBindableCollapsiblePanel
+    {
+        public RasterLayerVisibilitySectionCtrl()
+        {
+            InitializeComponent();
+            cmbBackgroundColor.ResetColors();
+            cmbForegroundColor.ResetColors();
+        }
+
+        private IEditorService _edsvc;
+        private IRasterLayerDefinition _rl;
+        private IGridScaleRange _activeRange;
+        private IGridColorStyle _colorStyle;
+
+        private IGridColorRule _foregroundColor;
+        private IGridColorRule _backgroundColor;
+
+        private bool _init = false;
+
+        public override void Bind(IEditorService service)
+        {
+            _init = true;
+            try
+            {
+                _edsvc = service;
+                _rl = (IRasterLayerDefinition)((ILayerDefinition)service.GetEditedResource()).SubLayer;
+
+                _activeRange = _rl.GetScaleRangeAt(0);
+                _colorStyle = _activeRange.ColorStyle;
+
+                _backgroundColor = _colorStyle.GetColorRuleAt(0);
+                _foregroundColor = _colorStyle.GetColorRuleAt(1);
+
+                txtVisibleFrom.Text = (_activeRange.MinScale.HasValue ? _activeRange.MinScale.Value : 0).ToString();
+                txtRebuildFactor.Text = _activeRange.RebuildFactor.ToString();
+                cmbVisibleTo.Text = (_activeRange.MaxScale.HasValue ? _activeRange.MaxScale.Value.ToString() : Properties.Resources.Infinity);
+
+                string fg = _foregroundColor.Color.GetValue();
+                string bg = _backgroundColor.Color.GetValue();
+
+                if (!string.IsNullOrEmpty(fg))
+                    cmbForegroundColor.CurrentColor = Utility.ParseHTMLColor(fg);
+                if (!string.IsNullOrEmpty(bg))
+                    cmbBackgroundColor.CurrentColor = Utility.ParseHTMLColor(bg);
+            }
+            finally
+            {
+                _init = false;
+            }
+        }
+
+        private void txtVisibleFrom_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            double d;
+            if (double.TryParse(txtVisibleFrom.Text, NumberStyles.Any, CultureInfo.CurrentUICulture, out d))
+            {
+                _activeRange.MinScale = d;
+            }
+            else
+            {
+                _activeRange.MinScale = null;
+            }
+            OnResourceChanged();
+        }
+
+        private void cmbVisibleTo_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            cmbVisibleTo_TextChanged(sender, e);
+        }
+
+        private void txtRebuildFactor_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            double d;
+            if (double.TryParse(txtRebuildFactor.Text, NumberStyles.Any, CultureInfo.CurrentUICulture, out d))
+                _activeRange.RebuildFactor = d;
+            else
+                _activeRange.RebuildFactor = 1;
+            OnResourceChanged();
+        }
+
+        private void cmbForegroundColor_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            _foregroundColor.Color.SetValue(Utility.SerializeHTMLColor(cmbForegroundColor.CurrentColor, false));
+            OnResourceChanged();
+        }
+
+        private void cmbBackgroundColor_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            _backgroundColor.Color.SetValue(Utility.SerializeHTMLColor(cmbBackgroundColor.CurrentColor, false));
+            OnResourceChanged();
+        }
+
+        private void cmbVisibleTo_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            double d;
+            if (double.TryParse(cmbVisibleTo.Text, NumberStyles.Any, CultureInfo.CurrentUICulture, out d))
+            {
+                _activeRange.MaxScale = d;
+            }
+            else
+            {
+                _activeRange.MaxScale = null;
+            }
+            OnResourceChanged();
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerVisibilitySectionCtrl.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerVisibilitySectionCtrl.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/Raster/RasterLayerVisibilitySectionCtrl.resx	2011-02-26 16:50:39 UTC (rev 5568)
@@ -0,0 +1,435 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="groupBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="cmbBackgroundColor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>150, 45</value>
+  </data>
+  <data name="cmbBackgroundColor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>121, 21</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="cmbBackgroundColor.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name="&gt;&gt;cmbBackgroundColor.Name" xml:space="preserve">
+    <value>cmbBackgroundColor</value>
+  </data>
+  <data name="&gt;&gt;cmbBackgroundColor.Type" xml:space="preserve">
+    <value>Maestro.Editors.Common.ColorComboBox, Maestro.Editors, Version=3.0.0.5475, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;cmbBackgroundColor.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;cmbBackgroundColor.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="cmbForegroundColor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>150, 21</value>
+  </data>
+  <data name="cmbForegroundColor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>121, 21</value>
+  </data>
+  <data name="cmbForegroundColor.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="&gt;&gt;cmbForegroundColor.Name" xml:space="preserve">
+    <value>cmbForegroundColor</value>
+  </data>
+  <data name="&gt;&gt;cmbForegroundColor.Type" xml:space="preserve">
+    <value>Maestro.Editors.Common.ColorComboBox, Maestro.Editors, Version=3.0.0.5475, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;cmbForegroundColor.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;cmbForegroundColor.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label4.Location" type="System.Drawing.Point, System.Drawing">
+    <value>20, 48</value>
+  </data>
+  <data name="label4.Size" type="System.Drawing.Size, System.Drawing">
+    <value>107, 16</value>
+  </data>
+  <data name="label4.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="label4.Text" xml:space="preserve">
+    <value>Background color</value>
+  </data>
+  <data name="&gt;&gt;label4.Name" xml:space="preserve">
+    <value>label4</value>
+  </data>
+  <data name="&gt;&gt;label4.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label4.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>20, 24</value>
+  </data>
+  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>107, 16</value>
+  </data>
+  <data name="label3.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="label3.Text" xml:space="preserve">
+    <value>Foreground color</value>
+  </data>
+  <data name="&gt;&gt;label3.Name" xml:space="preserve">
+    <value>label3</value>
+  </data>
+  <data name="&gt;&gt;label3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label3.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>19, 80</value>
+  </data>
+  <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>392, 78</value>
+  </data>
+  <data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name="groupBox1.Text" xml:space="preserve">
+    <value>Two tone image color settings</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
+    <value>contentPanel</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="txtRebuildFactor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="txtRebuildFactor.Location" type="System.Drawing.Point, System.Drawing">
+    <value>296, 45</value>
+  </data>
+  <data name="txtRebuildFactor.Size" type="System.Drawing.Size, System.Drawing">
+    <value>115, 20</value>
+  </data>
+  <data name="txtRebuildFactor.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name="txtRebuildFactor.Text" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;txtRebuildFactor.Name" xml:space="preserve">
+    <value>txtRebuildFactor</value>
+  </data>
+  <data name="&gt;&gt;txtRebuildFactor.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;txtRebuildFactor.Parent" xml:space="preserve">
+    <value>contentPanel</value>
+  </data>
+  <data name="&gt;&gt;txtRebuildFactor.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="RebuildThreshold.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="RebuildThreshold.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 48</value>
+  </data>
+  <data name="RebuildThreshold.Size" type="System.Drawing.Size, System.Drawing">
+    <value>264, 16</value>
+  </data>
+  <data name="RebuildThreshold.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="RebuildThreshold.Text" xml:space="preserve">
+    <value>Rebuild raster after zoom factor</value>
+  </data>
+  <data name="&gt;&gt;RebuildThreshold.Name" xml:space="preserve">
+    <value>RebuildThreshold</value>
+  </data>
+  <data name="&gt;&gt;RebuildThreshold.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;RebuildThreshold.Parent" xml:space="preserve">
+    <value>contentPanel</value>
+  </data>
+  <data name="&gt;&gt;RebuildThreshold.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="cmbVisibleTo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="cmbVisibleTo.Items" xml:space="preserve">
+    <value>Infinity</value>
+  </data>
+  <data name="cmbVisibleTo.Location" type="System.Drawing.Point, System.Drawing">
+    <value>296, 18</value>
+  </data>
+  <data name="cmbVisibleTo.Size" type="System.Drawing.Size, System.Drawing">
+    <value>115, 21</value>
+  </data>
+  <data name="cmbVisibleTo.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
+  </data>
+  <data name="cmbVisibleTo.Text" xml:space="preserve">
+    <value>Infinity</value>
+  </data>
+  <data name="&gt;&gt;cmbVisibleTo.Name" xml:space="preserve">
+    <value>cmbVisibleTo</value>
+  </data>
+  <data name="&gt;&gt;cmbVisibleTo.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;cmbVisibleTo.Parent" xml:space="preserve">
+    <value>contentPanel</value>
+  </data>
+  <data name="&gt;&gt;cmbVisibleTo.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>242, 21</value>
+  </data>
+  <data name="label2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>48, 16</value>
+  </data>
+  <data name="label2.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="label2.Text" xml:space="preserve">
+    <value>to</value>
+  </data>
+  <data name="&gt;&gt;label2.Name" xml:space="preserve">
+    <value>label2</value>
+  </data>
+  <data name="&gt;&gt;label2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label2.Parent" xml:space="preserve">
+    <value>contentPanel</value>
+  </data>
+  <data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="txtVisibleFrom.Location" type="System.Drawing.Point, System.Drawing">
+    <value>120, 18</value>
+  </data>
+  <data name="txtVisibleFrom.Size" type="System.Drawing.Size, System.Drawing">
+    <value>104, 20</value>
+  </data>
+  <data name="txtVisibleFrom.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="txtVisibleFrom.Text" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;txtVisibleFrom.Name" xml:space="preserve">
+    <value>txtVisibleFrom</value>
+  </data>
+  <data name="&gt;&gt;txtVisibleFrom.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;txtVisibleFrom.Parent" xml:space="preserve">
+    <value>contentPanel</value>
+  </data>
+  <data name="&gt;&gt;txtVisibleFrom.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 21</value>
+  </data>
+  <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>96, 16</value>
+  </data>
+  <data name="label1.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="label1.Text" xml:space="preserve">
+    <value>Visible from</value>
+  </data>
+  <data name="&gt;&gt;label1.Name" xml:space="preserve">
+    <value>label1</value>
+  </data>
+  <data name="&gt;&gt;label1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label1.Parent" xml:space="preserve">
+    <value>contentPanel</value>
+  </data>
+  <data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="contentPanel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>449, 170</value>
+  </data>
+  <data name="&gt;&gt;contentPanel.Name" xml:space="preserve">
+    <value>contentPanel</value>
+  </data>
+  <data name="&gt;&gt;contentPanel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;contentPanel.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;contentPanel.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>449, 197</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>RasterLayerVisibilitySectionCtrl</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>Maestro.Editors.Common.EditorBindableCollapsiblePanel, Maestro.Editors, Version=3.0.0.5475, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/RasterLayerEditorCtrl.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/RasterLayerEditorCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/RasterLayerEditorCtrl.Designer.cs	2011-02-26 16:50:39 UTC (rev 5568)
@@ -0,0 +1,92 @@
+namespace Maestro.Editors.LayerDefinition
+{
+    partial class RasterLayerEditorCtrl
+    {
+        /// <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.rasterLayerSettingsSectionCtrl = new Maestro.Editors.LayerDefinition.Raster.RasterLayerSettingsSectionCtrl();
+            this.rasterLayerVisibilitySectionCtrl = new Maestro.Editors.LayerDefinition.Raster.RasterLayerVisibilitySectionCtrl();
+            this.rasterLayerAdvancedSectionCtrl = new Maestro.Editors.LayerDefinition.Raster.RasterLayerAdvancedSectionCtrl();
+            this.SuspendLayout();
+            // 
+            // rasterLayerSettingsSectionCtrl
+            // 
+            this.rasterLayerSettingsSectionCtrl.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.rasterLayerSettingsSectionCtrl.Dock = System.Windows.Forms.DockStyle.Top;
+            this.rasterLayerSettingsSectionCtrl.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.rasterLayerSettingsSectionCtrl.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold);
+            this.rasterLayerSettingsSectionCtrl.HeaderText = "Feature Source Settings";
+            this.rasterLayerSettingsSectionCtrl.Location = new System.Drawing.Point(0, 0);
+            this.rasterLayerSettingsSectionCtrl.Name = "rasterLayerSettingsSectionCtrl";
+            this.rasterLayerSettingsSectionCtrl.Size = new System.Drawing.Size(594, 145);
+            this.rasterLayerSettingsSectionCtrl.TabIndex = 0;
+            // 
+            // rasterLayerVisibilitySectionCtrl
+            // 
+            this.rasterLayerVisibilitySectionCtrl.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.rasterLayerVisibilitySectionCtrl.Dock = System.Windows.Forms.DockStyle.Top;
+            this.rasterLayerVisibilitySectionCtrl.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.rasterLayerVisibilitySectionCtrl.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold);
+            this.rasterLayerVisibilitySectionCtrl.HeaderText = "Layer Visbility";
+            this.rasterLayerVisibilitySectionCtrl.Location = new System.Drawing.Point(0, 145);
+            this.rasterLayerVisibilitySectionCtrl.Name = "rasterLayerVisibilitySectionCtrl";
+            this.rasterLayerVisibilitySectionCtrl.Size = new System.Drawing.Size(594, 197);
+            this.rasterLayerVisibilitySectionCtrl.TabIndex = 1;
+            // 
+            // rasterLayerAdvancedSectionCtrl
+            // 
+            this.rasterLayerAdvancedSectionCtrl.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.rasterLayerAdvancedSectionCtrl.Dock = System.Windows.Forms.DockStyle.Top;
+            this.rasterLayerAdvancedSectionCtrl.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.rasterLayerAdvancedSectionCtrl.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold);
+            this.rasterLayerAdvancedSectionCtrl.HeaderText = "Advanced Settings";
+            this.rasterLayerAdvancedSectionCtrl.Location = new System.Drawing.Point(0, 342);
+            this.rasterLayerAdvancedSectionCtrl.Name = "rasterLayerAdvancedSectionCtrl";
+            this.rasterLayerAdvancedSectionCtrl.Size = new System.Drawing.Size(594, 391);
+            this.rasterLayerAdvancedSectionCtrl.TabIndex = 2;
+            // 
+            // RasterLayerEditorCtrl
+            // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            this.AutoScroll = true;
+            this.Controls.Add(this.rasterLayerAdvancedSectionCtrl);
+            this.Controls.Add(this.rasterLayerVisibilitySectionCtrl);
+            this.Controls.Add(this.rasterLayerSettingsSectionCtrl);
+            this.Name = "RasterLayerEditorCtrl";
+            this.Size = new System.Drawing.Size(594, 539);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private Maestro.Editors.LayerDefinition.Raster.RasterLayerSettingsSectionCtrl rasterLayerSettingsSectionCtrl;
+        private Maestro.Editors.LayerDefinition.Raster.RasterLayerVisibilitySectionCtrl rasterLayerVisibilitySectionCtrl;
+        private Maestro.Editors.LayerDefinition.Raster.RasterLayerAdvancedSectionCtrl rasterLayerAdvancedSectionCtrl;
+
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/RasterLayerEditorCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/RasterLayerEditorCtrl.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/RasterLayerEditorCtrl.cs	2011-02-26 16:50:39 UTC (rev 5568)
@@ -0,0 +1,51 @@
+#region Disclaimer / License
+// Copyright (C) 2011, 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 OSGeo.MapGuide.ObjectModels.LayerDefinition;
+
+namespace Maestro.Editors.LayerDefinition
+{
+    public partial class RasterLayerEditorCtrl : EditorBase
+    {
+        public RasterLayerEditorCtrl()
+        {
+            InitializeComponent();
+        }
+
+        private IRasterLayerDefinition _rldf;
+        private IEditorService _edsvc;
+
+        public override void Bind(IEditorService service)
+        {
+            _edsvc = service;
+            _rldf = (IRasterLayerDefinition)((ILayerDefinition)_edsvc.GetEditedResource()).SubLayer;
+            _edsvc.RegisterCustomNotifier(this);
+            rasterLayerSettingsSectionCtrl.Bind(_edsvc);
+            rasterLayerVisibilitySectionCtrl.Bind(_edsvc);
+            rasterLayerAdvancedSectionCtrl.Bind(_edsvc);
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/RasterLayerEditorCtrl.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/RasterLayerEditorCtrl.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/LayerDefinition/RasterLayerEditorCtrl.resx	2011-02-26 16:50:39 UTC (rev 5568)
@@ -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-3.0/Maestro.Editors/Maestro.Editors.csproj
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj	2011-02-26 14:26:56 UTC (rev 5567)
+++ sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj	2011-02-26 16:50:39 UTC (rev 5568)
@@ -531,6 +531,30 @@
     <Compile Include="LayerDefinition\LayerPropertiesSectionCtrl.Designer.cs">
       <DependentUpon>LayerPropertiesSectionCtrl.cs</DependentUpon>
     </Compile>
+    <Compile Include="LayerDefinition\RasterLayerEditorCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\RasterLayerEditorCtrl.Designer.cs">
+      <DependentUpon>RasterLayerEditorCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LayerDefinition\Raster\RasterLayerAdvancedSectionCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Raster\RasterLayerAdvancedSectionCtrl.Designer.cs">
+      <DependentUpon>RasterLayerAdvancedSectionCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LayerDefinition\Raster\RasterLayerSettingsSectionCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Raster\RasterLayerSettingsSectionCtrl.Designer.cs">
+      <DependentUpon>RasterLayerSettingsSectionCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LayerDefinition\Raster\RasterLayerVisibilitySectionCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LayerDefinition\Raster\RasterLayerVisibilitySectionCtrl.Designer.cs">
+      <DependentUpon>RasterLayerVisibilitySectionCtrl.cs</DependentUpon>
+    </Compile>
     <Compile Include="LayerDefinition\VectorLayerEditorCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -1104,6 +1128,18 @@
       <DependentUpon>LayerPropertiesSectionCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\RasterLayerEditorCtrl.resx">
+      <DependentUpon>RasterLayerEditorCtrl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Raster\RasterLayerAdvancedSectionCtrl.resx">
+      <DependentUpon>RasterLayerAdvancedSectionCtrl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Raster\RasterLayerSettingsSectionCtrl.resx">
+      <DependentUpon>RasterLayerSettingsSectionCtrl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LayerDefinition\Raster\RasterLayerVisibilitySectionCtrl.resx">
+      <DependentUpon>RasterLayerVisibilitySectionCtrl.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="LayerDefinition\VectorLayerEditorCtrl.resx">
       <DependentUpon>VectorLayerEditorCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>
@@ -1779,7 +1815,6 @@
   </ItemGroup>
   <ItemGroup>
     <Folder Include="DrawingSource\Preview\" />
-    <Folder Include="LayerDefinition\Raster\" />
     <Folder Include="SymbolDefinition\" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

Modified: sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs	2011-02-26 14:26:56 UTC (rev 5567)
+++ sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs	2011-02-26 16:50:39 UTC (rev 5568)
@@ -1489,6 +1489,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Infinity.
+        /// </summary>
+        internal static string Infinity {
+            get {
+                return ResourceManager.GetString("Infinity", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to You have entered a non-numeric value in the Reference Y field. Due to a bug in MapGuide, this will likely give an error when saving..
         /// </summary>
         internal static string InsertionPointYError {
@@ -1809,6 +1818,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to This feature source has no class definitions with raster properties.
+        /// </summary>
+        internal static string NoRasterClasses {
+            get {
+                return ResourceManager.GetString("NoRasterClasses", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to You have selected to restore the package at another location, but not entered one.
         ///This will cause the package to be restored a the root of the resource tree.
         ///Are you sure this is what you want?.

Modified: sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx	2011-02-26 14:26:56 UTC (rev 5567)
+++ sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx	2011-02-26 16:50:39 UTC (rev 5568)
@@ -1100,4 +1100,10 @@
   <data name="FdoConnectionStatus" xml:space="preserve">
     <value>FDO Connection Status: {0}</value>
   </data>
+  <data name="NoRasterClasses" xml:space="preserve">
+    <value>This feature source has no class definitions with raster properties</value>
+  </data>
+  <data name="Infinity" xml:space="preserve">
+    <value>Infinity</value>
+  </data>
 </root>
\ No newline at end of file

Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/GridLayerDefinitionImpl.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/GridLayerDefinitionImpl.cs	2011-02-26 14:26:56 UTC (rev 5567)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/GridLayerDefinitionImpl.cs	2011-02-26 16:50:39 UTC (rev 5568)
@@ -109,12 +109,17 @@
 
         public int IndexOfScaleRange(IGridScaleRange range)
         {
-            throw new NotImplementedException();
+            var gsr = range as GridScaleRangeType;
+            if (gsr != null)
+            {
+                this.GridScaleRange.IndexOf(gsr);
+            }
+            return -1;
         }
 
         public IGridScaleRange GetScaleRangeAt(int index)
         {
-            throw new NotImplementedException();
+            return this.GridScaleRange[index];
         }
 
         [XmlIgnore]
@@ -341,6 +346,21 @@
 
             throw new Exception(); //Should never get here
         }
+
+        public void SetValue(string htmlColor)
+        {
+            this.ItemElementName = ItemChoiceType.ExplicitColor;
+            this.Item = htmlColor;
+        }
+
+        public string GetValue()
+        {
+            if (this.Item != null && this.ItemElementName == ItemChoiceType.ExplicitColor)
+            {
+                return this.Item.ToString();
+            }
+            return null;
+        }
     }
 
     partial class GridColorRuleType : IGridColorRule
@@ -482,28 +502,52 @@
         }
 
         [XmlIgnore]
-        double IGridColorStyle.BrightnessFactor
+        public bool BrightnessFactorSpecified { get; set; }
+
+        [XmlIgnore]
+        public bool ContrastFactorSpecified { get; set; }
+
+        [XmlIgnore]
+        double? IGridColorStyle.BrightnessFactor
         {
             get
             {
-                return this.BrightnessFactor;
+                if (this.BrightnessFactorSpecified)
+                    return this.BrightnessFactor;
+                else
+                    return null;
             }
             set
             {
-                this.BrightnessFactor = value;
+                if (value.HasValue)
+                {
+                    this.BrightnessFactor = value.Value;
+                    this.BrightnessFactorSpecified = true;
+                }
+                else
+                    this.BrightnessFactorSpecified = false;
             }
         }
 
         [XmlIgnore]
-        double IGridColorStyle.ConstrastFactor
+        double? IGridColorStyle.ContrastFactor
         {
             get
             {
-                return this.ContrastFactor;
+                if (this.ContrastFactorSpecified)
+                    return this.ContrastFactor;
+                else
+                    return null;
             }
             set
             {
-                this.ContrastFactor = value;
+                if (value.HasValue)
+                {
+                    this.ContrastFactor = value.Value;
+                    this.ContrastFactorSpecified = true;
+                }
+                else
+                    this.ContrastFactorSpecified = false;
             }
         }
 
@@ -533,6 +577,22 @@
             if (cr != null)
                 this.ColorRule.Remove((GridColorRuleType)cr);
         }
+
+        [XmlIgnore]
+        public int ColorRuleCount
+        {
+            get { return this.ColorRule.Count; }
+        }
+
+        public IGridColorRule GetColorRuleAt(int index)
+        {
+            return this.ColorRule[index];
+        }
+
+        public IHillShade CreateHillShade()
+        {
+            return new HillShadeType();
+        }
     }
 
     partial class GridSurfaceStyleType : IGridSurfaceStyle
@@ -665,6 +725,20 @@
                 this.RebuildFactor = value;
             }
         }
+
+        public IGridColorStyle CreateColorStyle()
+        {
+            return new GridColorStyleType()
+            {
+                ColorRule = new System.ComponentModel.BindingList<GridColorRuleType>(),
+                HillShade = new HillShadeType()
+            };
+        }
+
+        public IGridSurfaceStyle CreateSurfaceStyle()
+        {
+            return new GridSurfaceStyleType();
+        }
     }
 
 }

Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerInterfaceExtensions.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerInterfaceExtensions.cs	2011-02-26 14:26:56 UTC (rev 5567)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerInterfaceExtensions.cs	2011-02-26 16:50:39 UTC (rev 5568)
@@ -239,9 +239,51 @@
             switch (layer.SubLayer.LayerType)
             {
                 case LayerType.Vector:
-                    return conn.FeatureService.GetSpatialExtent(layer.SubLayer.ResourceId, ((IVectorLayerDefinition)layer.SubLayer).FeatureName, ((IVectorLayerDefinition)layer.SubLayer).Geometry);
+                    {
+                        IEnvelope env = null;
+                        try
+                        {
+                            env = conn.FeatureService.GetSpatialExtent(layer.SubLayer.ResourceId, ((IVectorLayerDefinition)layer.SubLayer).FeatureName, ((IVectorLayerDefinition)layer.SubLayer).Geometry);
+                            return env;
+                        }
+                        catch //Default to extents of active spatial context
+                        {
+                            var scList = conn.FeatureService.GetSpatialContextInfo(layer.SubLayer.ResourceId, true);
+                            if (scList.SpatialContext.Count == 1)
+                            {
+                                var sc = scList.SpatialContext[0];
+                                return ObjectFactory.CreateEnvelope(
+                                    Convert.ToDouble(sc.Extent.LowerLeftCoordinate.X),
+                                    Convert.ToDouble(sc.Extent.LowerLeftCoordinate.Y),
+                                    Convert.ToDouble(sc.Extent.UpperRightCoordinate.X),
+                                    Convert.ToDouble(sc.Extent.UpperRightCoordinate.Y));
+                            }
+                            return null;
+                        }
+                    }
                 case LayerType.Raster:
-                    return conn.FeatureService.GetSpatialExtent(layer.SubLayer.ResourceId, ((IRasterLayerDefinition)layer.SubLayer).FeatureName, ((IRasterLayerDefinition)layer.SubLayer).Geometry);
+                    {
+                        IEnvelope env = null;
+                        try
+                        {
+                            env = conn.FeatureService.GetSpatialExtent(layer.SubLayer.ResourceId, ((IRasterLayerDefinition)layer.SubLayer).FeatureName, ((IRasterLayerDefinition)layer.SubLayer).Geometry);
+                            return env;
+                        }
+                        catch //Default to extents of active spatial context
+                        {
+                            var scList = conn.FeatureService.GetSpatialContextInfo(layer.SubLayer.ResourceId, true);
+                            if (scList.SpatialContext.Count == 1)
+                            {
+                                var sc = scList.SpatialContext[0];
+                                return ObjectFactory.CreateEnvelope(
+                                    Convert.ToDouble(sc.Extent.LowerLeftCoordinate.X),
+                                    Convert.ToDouble(sc.Extent.LowerLeftCoordinate.Y),
+                                    Convert.ToDouble(sc.Extent.UpperRightCoordinate.X),
+                                    Convert.ToDouble(sc.Extent.UpperRightCoordinate.Y));
+                            }
+                            return null;
+                        }
+                    }
                 default:
                     {
                         int[] services = conn.Capabilities.SupportedServices;

Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerInterfaces.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerInterfaces.cs	2011-02-26 14:26:56 UTC (rev 5567)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerInterfaces.cs	2011-02-26 16:50:39 UTC (rev 5568)
@@ -1304,6 +1304,18 @@
         /// </summary>
         /// <value>The color of the explicit.</value>
         IExplicitColor ExplicitColor { get; set; }
+
+        /// <summary>
+        /// Set the color
+        /// </summary>
+        /// <param name="htmlColor"></param>
+        void SetValue(string htmlColor);
+
+        /// <summary>
+        /// Gets the html color value
+        /// </summary>
+        /// <returns></returns>
+        string GetValue();
     }
 
     /// <summary>
@@ -1378,12 +1390,12 @@
         /// <summary>
         /// Gets or sets the brightness factor
         /// </summary>
-        double BrightnessFactor { get; set; }
+        double? BrightnessFactor { get; set; }
 
         /// <summary>
         /// Gets or sets the contrast factor
         /// </summary>
-        double ConstrastFactor { get; set; }
+        double? ContrastFactor { get; set; }
 
         /// <summary>
         /// Gets the color rules for this style
@@ -1391,6 +1403,18 @@
         IEnumerable<IGridColorRule> ColorRule { get; }
 
         /// <summary>
+        /// Gets the number of color rules
+        /// </summary>
+        int ColorRuleCount { get; }
+
+        /// <summary>
+        /// Gets the color rule at the specified index
+        /// </summary>
+        /// <param name="index"></param>
+        /// <returns></returns>
+        IGridColorRule GetColorRuleAt(int index);
+
+        /// <summary>
         /// Adds a color rule to this style
         /// </summary>
         /// <param name="rule"></param>
@@ -1401,6 +1425,12 @@
         /// </summary>
         /// <param name="rule"></param>
         void RemoveColorRule(IGridColorRule rule);
+
+        /// <summary>
+        /// Creates a default hillshade
+        /// </summary>
+        /// <returns></returns>
+        IHillShade CreateHillShade();
     }
 
     /// <summary>
@@ -1459,6 +1489,18 @@
         /// When the user has zoomed in by this amount, a request for more detailed raster data is made
         /// </summary>
         double RebuildFactor { get; set; }
+
+        /// <summary>
+        /// Creates a default grid color style
+        /// </summary>
+        /// <returns></returns>
+        IGridColorStyle CreateColorStyle();
+
+        /// <summary>
+        /// Creates a default grid surface style
+        /// </summary>
+        /// <returns></returns>
+        IGridSurfaceStyle CreateSurfaceStyle();
     }
 
     #endregion



More information about the mapguide-commits mailing list