[mapguide-commits] r8242 - in trunk/Tools/Maestro: Maestro.Editors Maestro.Editors/Fusion Maestro.Editors/Fusion/MapEditors OSGeo.MapGuide.MaestroAPI/ObjectModels

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Wed Jun 18 02:02:42 PDT 2014


Author: jng
Date: 2014-06-18 02:02:42 -0700 (Wed, 18 Jun 2014)
New Revision: 8242

Added:
   trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/
   trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/CommercialMapEditor.Designer.cs
   trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/CommercialMapEditor.cs
   trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/CommercialMapEditor.resx
   trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/EditorFactory.cs
   trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/GenericEditor.Designer.cs
   trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/GenericEditor.cs
   trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/GenericEditor.resx
   trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/MapGuideEditor.Designer.cs
   trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/MapGuideEditor.cs
   trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/MapGuideEditor.resx
Modified:
   trunk/Tools/Maestro/Maestro.Editors/Fusion/MapCtrl.Designer.cs
   trunk/Tools/Maestro/Maestro.Editors/Fusion/MapCtrl.cs
   trunk/Tools/Maestro/Maestro.Editors/Fusion/MapCtrl.resx
   trunk/Tools/Maestro/Maestro.Editors/Maestro.Editors.csproj
   trunk/Tools/Maestro/Maestro.Editors/Strings.Designer.cs
   trunk/Tools/Maestro/Maestro.Editors/Strings.resx
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/ApplicationDefinition.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/ApplicationDefinitionInterfaces.cs
Log:
#1635: First cut of re-vamped map group component for the Fusion editor. The re-vamped UI reflects the logical structure of the MapGroup and provides the ability to edit raw XML fragments if integrating with other layer types is desired.

Modified: trunk/Tools/Maestro/Maestro.Editors/Fusion/MapCtrl.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Fusion/MapCtrl.Designer.cs	2014-06-18 08:37:30 UTC (rev 8241)
+++ trunk/Tools/Maestro/Maestro.Editors/Fusion/MapCtrl.Designer.cs	2014-06-18 09:02:42 UTC (rev 8242)
@@ -31,49 +31,19 @@
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MapCtrl));
             this.label1 = new System.Windows.Forms.Label();
             this.txtMapId = new System.Windows.Forms.TextBox();
-            this.groupBox1 = new System.Windows.Forms.GroupBox();
-            this.chkOverride = new System.Windows.Forms.CheckBox();
-            this.txtViewScale = new System.Windows.Forms.TextBox();
-            this.txtViewY = new System.Windows.Forms.TextBox();
-            this.txtViewX = new System.Windows.Forms.TextBox();
-            this.label4 = new System.Windows.Forms.Label();
-            this.label3 = new System.Windows.Forms.Label();
-            this.label2 = new System.Windows.Forms.Label();
-            this.label5 = new System.Windows.Forms.Label();
-            this.txtMapDefinition = new System.Windows.Forms.TextBox();
-            this.btnBrowseMdf = new System.Windows.Forms.Button();
-            this.chkSingleTiled = new System.Windows.Forms.CheckBox();
-            this.lblSelColor = new System.Windows.Forms.Label();
-            this.chkSelectionAsOverlay = new System.Windows.Forms.CheckBox();
             this.groupBox2 = new System.Windows.Forms.GroupBox();
-            this.cmbSelectionColor = new Maestro.Editors.Common.ColorComboBox();
-            this.grpCms = new System.Windows.Forms.GroupBox();
-            this.groupBox6 = new System.Windows.Forms.GroupBox();
-            this.chkOsmMapnik = new System.Windows.Forms.CheckBox();
-            this.chkOsmTransportMap = new System.Windows.Forms.CheckBox();
-            this.chkOsmCycleMap = new System.Windows.Forms.CheckBox();
-            this.groupBox5 = new System.Windows.Forms.GroupBox();
-            this.chkGoogTerrain = new System.Windows.Forms.CheckBox();
-            this.chkGoogStreets = new System.Windows.Forms.CheckBox();
-            this.chkGoogSatellite = new System.Windows.Forms.CheckBox();
-            this.chkGoogHybrid = new System.Windows.Forms.CheckBox();
-            this.groupBox4 = new System.Windows.Forms.GroupBox();
-            this.chkBingStreets = new System.Windows.Forms.CheckBox();
-            this.chkBingSatellite = new System.Windows.Forms.CheckBox();
-            this.chkBingHybrid = new System.Windows.Forms.CheckBox();
-            this.groupBox3 = new System.Windows.Forms.GroupBox();
-            this.chkYahooStreets = new System.Windows.Forms.CheckBox();
-            this.chkYahooSatellite = new System.Windows.Forms.CheckBox();
-            this.chkYahooHybrid = new System.Windows.Forms.CheckBox();
-            this.txtYahooApiKey = new System.Windows.Forms.TextBox();
-            this.label7 = new System.Windows.Forms.Label();
-            this.groupBox1.SuspendLayout();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.lstMaps = new System.Windows.Forms.ListBox();
+            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.btnNewMap = new System.Windows.Forms.ToolStripSplitButton();
+            this.btnRemoveMap = new System.Windows.Forms.ToolStripButton();
+            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+            this.btnMapUp = new System.Windows.Forms.ToolStripButton();
+            this.btnMapDown = new System.Windows.Forms.ToolStripButton();
+            this.grpChildMap = new System.Windows.Forms.GroupBox();
             this.groupBox2.SuspendLayout();
-            this.grpCms.SuspendLayout();
-            this.groupBox6.SuspendLayout();
-            this.groupBox5.SuspendLayout();
-            this.groupBox4.SuspendLayout();
-            this.groupBox3.SuspendLayout();
+            this.groupBox1.SuspendLayout();
+            this.toolStrip1.SuspendLayout();
             this.SuspendLayout();
             // 
             // label1
@@ -87,285 +57,93 @@
             this.txtMapId.Name = "txtMapId";
             this.txtMapId.TextChanged += new System.EventHandler(this.txtMapId_TextChanged);
             // 
-            // groupBox1
-            // 
-            resources.ApplyResources(this.groupBox1, "groupBox1");
-            this.groupBox1.Controls.Add(this.chkOverride);
-            this.groupBox1.Controls.Add(this.txtViewScale);
-            this.groupBox1.Controls.Add(this.txtViewY);
-            this.groupBox1.Controls.Add(this.txtViewX);
-            this.groupBox1.Controls.Add(this.label4);
-            this.groupBox1.Controls.Add(this.label3);
-            this.groupBox1.Controls.Add(this.label2);
-            this.groupBox1.Name = "groupBox1";
-            this.groupBox1.TabStop = false;
-            // 
-            // chkOverride
-            // 
-            resources.ApplyResources(this.chkOverride, "chkOverride");
-            this.chkOverride.Name = "chkOverride";
-            this.chkOverride.UseVisualStyleBackColor = true;
-            this.chkOverride.CheckedChanged += new System.EventHandler(this.chkOverride_CheckedChanged);
-            // 
-            // txtViewScale
-            // 
-            resources.ApplyResources(this.txtViewScale, "txtViewScale");
-            this.txtViewScale.Name = "txtViewScale";
-            // 
-            // txtViewY
-            // 
-            resources.ApplyResources(this.txtViewY, "txtViewY");
-            this.txtViewY.Name = "txtViewY";
-            // 
-            // txtViewX
-            // 
-            resources.ApplyResources(this.txtViewX, "txtViewX");
-            this.txtViewX.Name = "txtViewX";
-            // 
-            // label4
-            // 
-            resources.ApplyResources(this.label4, "label4");
-            this.label4.Name = "label4";
-            // 
-            // label3
-            // 
-            resources.ApplyResources(this.label3, "label3");
-            this.label3.Name = "label3";
-            // 
-            // label2
-            // 
-            resources.ApplyResources(this.label2, "label2");
-            this.label2.Name = "label2";
-            // 
-            // label5
-            // 
-            resources.ApplyResources(this.label5, "label5");
-            this.label5.Name = "label5";
-            // 
-            // txtMapDefinition
-            // 
-            resources.ApplyResources(this.txtMapDefinition, "txtMapDefinition");
-            this.txtMapDefinition.Name = "txtMapDefinition";
-            this.txtMapDefinition.ReadOnly = true;
-            // 
-            // btnBrowseMdf
-            // 
-            resources.ApplyResources(this.btnBrowseMdf, "btnBrowseMdf");
-            this.btnBrowseMdf.Name = "btnBrowseMdf";
-            this.btnBrowseMdf.UseVisualStyleBackColor = true;
-            this.btnBrowseMdf.Click += new System.EventHandler(this.btnBrowseMdf_Click);
-            // 
-            // chkSingleTiled
-            // 
-            resources.ApplyResources(this.chkSingleTiled, "chkSingleTiled");
-            this.chkSingleTiled.Name = "chkSingleTiled";
-            this.chkSingleTiled.UseVisualStyleBackColor = true;
-            // 
-            // lblSelColor
-            // 
-            resources.ApplyResources(this.lblSelColor, "lblSelColor");
-            this.lblSelColor.Name = "lblSelColor";
-            // 
-            // chkSelectionAsOverlay
-            // 
-            resources.ApplyResources(this.chkSelectionAsOverlay, "chkSelectionAsOverlay");
-            this.chkSelectionAsOverlay.Name = "chkSelectionAsOverlay";
-            this.chkSelectionAsOverlay.UseVisualStyleBackColor = true;
-            // 
             // groupBox2
             // 
+            resources.ApplyResources(this.groupBox2, "groupBox2");
             this.groupBox2.Controls.Add(this.txtMapId);
-            this.groupBox2.Controls.Add(this.chkSelectionAsOverlay);
             this.groupBox2.Controls.Add(this.label1);
-            this.groupBox2.Controls.Add(this.cmbSelectionColor);
-            this.groupBox2.Controls.Add(this.groupBox1);
-            this.groupBox2.Controls.Add(this.lblSelColor);
-            this.groupBox2.Controls.Add(this.label5);
-            this.groupBox2.Controls.Add(this.chkSingleTiled);
-            this.groupBox2.Controls.Add(this.txtMapDefinition);
-            this.groupBox2.Controls.Add(this.btnBrowseMdf);
-            resources.ApplyResources(this.groupBox2, "groupBox2");
             this.groupBox2.Name = "groupBox2";
             this.groupBox2.TabStop = false;
             // 
-            // cmbSelectionColor
+            // groupBox1
             // 
-            this.cmbSelectionColor.FormattingEnabled = true;
-            resources.ApplyResources(this.cmbSelectionColor, "cmbSelectionColor");
-            this.cmbSelectionColor.Name = "cmbSelectionColor";
+            resources.ApplyResources(this.groupBox1, "groupBox1");
+            this.groupBox1.Controls.Add(this.lstMaps);
+            this.groupBox1.Controls.Add(this.toolStrip1);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.TabStop = false;
             // 
-            // grpCms
+            // lstMaps
             // 
-            resources.ApplyResources(this.grpCms, "grpCms");
-            this.grpCms.Controls.Add(this.groupBox6);
-            this.grpCms.Controls.Add(this.groupBox5);
-            this.grpCms.Controls.Add(this.groupBox4);
-            this.grpCms.Controls.Add(this.groupBox3);
-            this.grpCms.Controls.Add(this.txtYahooApiKey);
-            this.grpCms.Controls.Add(this.label7);
-            this.grpCms.Name = "grpCms";
-            this.grpCms.TabStop = false;
+            resources.ApplyResources(this.lstMaps, "lstMaps");
+            this.lstMaps.FormattingEnabled = true;
+            this.lstMaps.Name = "lstMaps";
+            this.lstMaps.SelectedIndexChanged += new System.EventHandler(this.lstMaps_SelectedIndexChanged);
             // 
-            // groupBox6
+            // toolStrip1
             // 
-            this.groupBox6.Controls.Add(this.chkOsmMapnik);
-            this.groupBox6.Controls.Add(this.chkOsmTransportMap);
-            this.groupBox6.Controls.Add(this.chkOsmCycleMap);
-            resources.ApplyResources(this.groupBox6, "groupBox6");
-            this.groupBox6.Name = "groupBox6";
-            this.groupBox6.TabStop = false;
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnNewMap,
+            this.btnRemoveMap,
+            this.toolStripSeparator1,
+            this.btnMapUp,
+            this.btnMapDown});
+            resources.ApplyResources(this.toolStrip1, "toolStrip1");
+            this.toolStrip1.Name = "toolStrip1";
             // 
-            // chkOsmMapnik
+            // btnNewMap
             // 
-            resources.ApplyResources(this.chkOsmMapnik, "chkOsmMapnik");
-            this.chkOsmMapnik.Name = "chkOsmMapnik";
-            this.chkOsmMapnik.UseVisualStyleBackColor = true;
-            this.chkOsmMapnik.CheckedChanged += new System.EventHandler(this.chkOsmMapnik_CheckedChanged);
+            this.btnNewMap.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            this.btnNewMap.Image = global::Maestro.Editors.Properties.Resources.map__plus;
+            resources.ApplyResources(this.btnNewMap, "btnNewMap");
+            this.btnNewMap.Name = "btnNewMap";
             // 
-            // chkOsmTransportMap
+            // btnRemoveMap
             // 
-            resources.ApplyResources(this.chkOsmTransportMap, "chkOsmTransportMap");
-            this.chkOsmTransportMap.Name = "chkOsmTransportMap";
-            this.chkOsmTransportMap.UseVisualStyleBackColor = true;
-            this.chkOsmTransportMap.CheckedChanged += new System.EventHandler(this.chkOsmTransportMap_CheckedChanged);
+            this.btnRemoveMap.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            resources.ApplyResources(this.btnRemoveMap, "btnRemoveMap");
+            this.btnRemoveMap.Image = global::Maestro.Editors.Properties.Resources.map__minus;
+            this.btnRemoveMap.Name = "btnRemoveMap";
             // 
-            // chkOsmCycleMap
+            // toolStripSeparator1
             // 
-            resources.ApplyResources(this.chkOsmCycleMap, "chkOsmCycleMap");
-            this.chkOsmCycleMap.Name = "chkOsmCycleMap";
-            this.chkOsmCycleMap.UseVisualStyleBackColor = true;
-            this.chkOsmCycleMap.CheckedChanged += new System.EventHandler(this.chkOsmCycleMap_CheckedChanged);
+            this.toolStripSeparator1.Name = "toolStripSeparator1";
+            resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
             // 
-            // groupBox5
+            // btnMapUp
             // 
-            this.groupBox5.Controls.Add(this.chkGoogTerrain);
-            this.groupBox5.Controls.Add(this.chkGoogStreets);
-            this.groupBox5.Controls.Add(this.chkGoogSatellite);
-            this.groupBox5.Controls.Add(this.chkGoogHybrid);
-            resources.ApplyResources(this.groupBox5, "groupBox5");
-            this.groupBox5.Name = "groupBox5";
-            this.groupBox5.TabStop = false;
+            this.btnMapUp.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            resources.ApplyResources(this.btnMapUp, "btnMapUp");
+            this.btnMapUp.Image = global::Maestro.Editors.Properties.Resources.arrow_090;
+            this.btnMapUp.Name = "btnMapUp";
             // 
-            // chkGoogTerrain
+            // btnMapDown
             // 
-            resources.ApplyResources(this.chkGoogTerrain, "chkGoogTerrain");
-            this.chkGoogTerrain.Name = "chkGoogTerrain";
-            this.chkGoogTerrain.UseVisualStyleBackColor = true;
-            this.chkGoogTerrain.CheckedChanged += new System.EventHandler(this.chkGoogTerrain_CheckedChanged);
+            this.btnMapDown.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            resources.ApplyResources(this.btnMapDown, "btnMapDown");
+            this.btnMapDown.Image = global::Maestro.Editors.Properties.Resources.arrow_270;
+            this.btnMapDown.Name = "btnMapDown";
             // 
-            // chkGoogStreets
+            // grpChildMap
             // 
-            resources.ApplyResources(this.chkGoogStreets, "chkGoogStreets");
-            this.chkGoogStreets.Name = "chkGoogStreets";
-            this.chkGoogStreets.UseVisualStyleBackColor = true;
-            this.chkGoogStreets.CheckedChanged += new System.EventHandler(this.chkGoogStreets_CheckedChanged);
+            resources.ApplyResources(this.grpChildMap, "grpChildMap");
+            this.grpChildMap.Name = "grpChildMap";
+            this.grpChildMap.TabStop = false;
             // 
-            // chkGoogSatellite
-            // 
-            resources.ApplyResources(this.chkGoogSatellite, "chkGoogSatellite");
-            this.chkGoogSatellite.Name = "chkGoogSatellite";
-            this.chkGoogSatellite.UseVisualStyleBackColor = true;
-            this.chkGoogSatellite.CheckedChanged += new System.EventHandler(this.chkGoogSatellite_CheckedChanged);
-            // 
-            // chkGoogHybrid
-            // 
-            resources.ApplyResources(this.chkGoogHybrid, "chkGoogHybrid");
-            this.chkGoogHybrid.Name = "chkGoogHybrid";
-            this.chkGoogHybrid.UseVisualStyleBackColor = true;
-            this.chkGoogHybrid.CheckedChanged += new System.EventHandler(this.chkGoogHybrid_CheckedChanged);
-            // 
-            // groupBox4
-            // 
-            this.groupBox4.Controls.Add(this.chkBingStreets);
-            this.groupBox4.Controls.Add(this.chkBingSatellite);
-            this.groupBox4.Controls.Add(this.chkBingHybrid);
-            resources.ApplyResources(this.groupBox4, "groupBox4");
-            this.groupBox4.Name = "groupBox4";
-            this.groupBox4.TabStop = false;
-            // 
-            // chkBingStreets
-            // 
-            resources.ApplyResources(this.chkBingStreets, "chkBingStreets");
-            this.chkBingStreets.Name = "chkBingStreets";
-            this.chkBingStreets.UseVisualStyleBackColor = true;
-            this.chkBingStreets.CheckedChanged += new System.EventHandler(this.chkBingStreets_CheckedChanged);
-            // 
-            // chkBingSatellite
-            // 
-            resources.ApplyResources(this.chkBingSatellite, "chkBingSatellite");
-            this.chkBingSatellite.Name = "chkBingSatellite";
-            this.chkBingSatellite.UseVisualStyleBackColor = true;
-            this.chkBingSatellite.CheckedChanged += new System.EventHandler(this.chkBingSatellite_CheckedChanged);
-            // 
-            // chkBingHybrid
-            // 
-            resources.ApplyResources(this.chkBingHybrid, "chkBingHybrid");
-            this.chkBingHybrid.Name = "chkBingHybrid";
-            this.chkBingHybrid.UseVisualStyleBackColor = true;
-            this.chkBingHybrid.CheckedChanged += new System.EventHandler(this.chkBingHybrid_CheckedChanged);
-            // 
-            // groupBox3
-            // 
-            this.groupBox3.Controls.Add(this.chkYahooStreets);
-            this.groupBox3.Controls.Add(this.chkYahooSatellite);
-            this.groupBox3.Controls.Add(this.chkYahooHybrid);
-            resources.ApplyResources(this.groupBox3, "groupBox3");
-            this.groupBox3.Name = "groupBox3";
-            this.groupBox3.TabStop = false;
-            // 
-            // chkYahooStreets
-            // 
-            resources.ApplyResources(this.chkYahooStreets, "chkYahooStreets");
-            this.chkYahooStreets.Name = "chkYahooStreets";
-            this.chkYahooStreets.UseVisualStyleBackColor = true;
-            this.chkYahooStreets.CheckedChanged += new System.EventHandler(this.chkYahooStreets_CheckedChanged);
-            // 
-            // chkYahooSatellite
-            // 
-            resources.ApplyResources(this.chkYahooSatellite, "chkYahooSatellite");
-            this.chkYahooSatellite.Name = "chkYahooSatellite";
-            this.chkYahooSatellite.UseVisualStyleBackColor = true;
-            this.chkYahooSatellite.CheckedChanged += new System.EventHandler(this.chkYahooSatellite_CheckedChanged);
-            // 
-            // chkYahooHybrid
-            // 
-            resources.ApplyResources(this.chkYahooHybrid, "chkYahooHybrid");
-            this.chkYahooHybrid.Name = "chkYahooHybrid";
-            this.chkYahooHybrid.UseVisualStyleBackColor = true;
-            this.chkYahooHybrid.CheckedChanged += new System.EventHandler(this.chkYahooHybrid_CheckedChanged);
-            // 
-            // txtYahooApiKey
-            // 
-            resources.ApplyResources(this.txtYahooApiKey, "txtYahooApiKey");
-            this.txtYahooApiKey.Name = "txtYahooApiKey";
-            this.txtYahooApiKey.TextChanged += new System.EventHandler(this.txtYahooApiKey_TextChanged);
-            // 
-            // label7
-            // 
-            resources.ApplyResources(this.label7, "label7");
-            this.label7.Name = "label7";
-            // 
             // MapCtrl
             // 
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
-            this.Controls.Add(this.grpCms);
+            this.Controls.Add(this.grpChildMap);
+            this.Controls.Add(this.groupBox1);
             this.Controls.Add(this.groupBox2);
             this.Name = "MapCtrl";
             resources.ApplyResources(this, "$this");
-            this.groupBox1.ResumeLayout(false);
-            this.groupBox1.PerformLayout();
             this.groupBox2.ResumeLayout(false);
             this.groupBox2.PerformLayout();
-            this.grpCms.ResumeLayout(false);
-            this.grpCms.PerformLayout();
-            this.groupBox6.ResumeLayout(false);
-            this.groupBox6.PerformLayout();
-            this.groupBox5.ResumeLayout(false);
-            this.groupBox5.PerformLayout();
-            this.groupBox4.ResumeLayout(false);
-            this.groupBox4.PerformLayout();
-            this.groupBox3.ResumeLayout(false);
-            this.groupBox3.PerformLayout();
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
             this.ResumeLayout(false);
 
         }
@@ -374,41 +152,15 @@
 
         private System.Windows.Forms.Label label1;
         private System.Windows.Forms.TextBox txtMapId;
-        private System.Windows.Forms.GroupBox groupBox1;
-        private System.Windows.Forms.TextBox txtViewScale;
-        private System.Windows.Forms.TextBox txtViewY;
-        private System.Windows.Forms.TextBox txtViewX;
-        private System.Windows.Forms.Label label4;
-        private System.Windows.Forms.Label label3;
-        private System.Windows.Forms.Label label2;
-        private System.Windows.Forms.Label label5;
-        private System.Windows.Forms.TextBox txtMapDefinition;
-        private System.Windows.Forms.Button btnBrowseMdf;
-        private System.Windows.Forms.CheckBox chkOverride;
-        private System.Windows.Forms.CheckBox chkSingleTiled;
-        private System.Windows.Forms.Label lblSelColor;
-        private Maestro.Editors.Common.ColorComboBox cmbSelectionColor;
-        private System.Windows.Forms.CheckBox chkSelectionAsOverlay;
         private System.Windows.Forms.GroupBox groupBox2;
-        private System.Windows.Forms.GroupBox grpCms;
-        private System.Windows.Forms.CheckBox chkGoogHybrid;
-        private System.Windows.Forms.CheckBox chkGoogSatellite;
-        private System.Windows.Forms.CheckBox chkGoogStreets;
-        private System.Windows.Forms.CheckBox chkYahooHybrid;
-        private System.Windows.Forms.CheckBox chkYahooSatellite;
-        private System.Windows.Forms.CheckBox chkYahooStreets;
-        private System.Windows.Forms.CheckBox chkBingHybrid;
-        private System.Windows.Forms.CheckBox chkBingSatellite;
-        private System.Windows.Forms.CheckBox chkBingStreets;
-        private System.Windows.Forms.Label label7;
-        private System.Windows.Forms.TextBox txtYahooApiKey;
-        private System.Windows.Forms.GroupBox groupBox5;
-        private System.Windows.Forms.GroupBox groupBox4;
-        private System.Windows.Forms.GroupBox groupBox3;
-        private System.Windows.Forms.CheckBox chkGoogTerrain;
-        private System.Windows.Forms.GroupBox groupBox6;
-        private System.Windows.Forms.CheckBox chkOsmMapnik;
-        private System.Windows.Forms.CheckBox chkOsmTransportMap;
-        private System.Windows.Forms.CheckBox chkOsmCycleMap;
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.ListBox lstMaps;
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.ToolStripSplitButton btnNewMap;
+        private System.Windows.Forms.ToolStripButton btnRemoveMap;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+        private System.Windows.Forms.ToolStripButton btnMapUp;
+        private System.Windows.Forms.ToolStripButton btnMapDown;
+        private System.Windows.Forms.GroupBox grpChildMap;
     }
 }

Modified: trunk/Tools/Maestro/Maestro.Editors/Fusion/MapCtrl.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Fusion/MapCtrl.cs	2014-06-18 08:37:30 UTC (rev 8241)
+++ trunk/Tools/Maestro/Maestro.Editors/Fusion/MapCtrl.cs	2014-06-18 09:02:42 UTC (rev 8242)
@@ -22,6 +22,7 @@
 using System.ComponentModel;
 using System.Drawing;
 using System.Data;
+using System.Linq;
 using System.Text;
 using System.Windows.Forms;
 using OSGeo.MapGuide.ObjectModels.ApplicationDefinition;
@@ -32,565 +33,97 @@
 using Maestro.Editors.Generic;
 using OSGeo.MapGuide.MaestroAPI.Services;
 using System.Diagnostics;
+using Maestro.Editors.Fusion.MapEditors;
 
 namespace Maestro.Editors.Fusion
 {
     [ToolboxItem(false)]
     internal partial class MapCtrl : UserControl, INotifyResourceChanged
     {
-        const string G_NORMAL_MAP = "G_NORMAL_MAP"; //NOXLATE
-        const string G_SATELLITE_MAP = "G_SATELLITE_MAP"; //NOXLATE
-        const string G_HYBRID_MAP = "G_HYBRID_MAP"; //NOXLATE
-        const string G_PHYSICAL_MAP = "G_PHYSICAL_MAP"; //NOXLATE
-
-        const string YAHOO_MAP_REG = "YAHOO_MAP_REG"; //NOXLATE
-        const string YAHOO_MAP_SAT = "YAHOO_MAP_SAT"; //NOXLATE
-        const string YAHOO_MAP_HYB = "YAHOO_MAP_HYB"; //NOXLATE
-
-        const string BING_ROAD = "Road"; //NOXLATE
-        const string BING_AERIAL = "Aerial"; //NOXLATE
-        const string BING_HYBRID = "Hybrid"; //NOXLATE
-
-        const string Type_Google = "Google"; //NOXLATE
-        const string Type_Yahoo = "Yahoo"; //NOXLATE
-        const string Type_Bing = "VirtualEarth"; //NOXLATE
-        const string Type_OSM = "OpenStreetMap"; //NOXLATE
-
-        const string OSM_MAP_MAPNIK = "Mapnik"; //NOXLATE
-        const string OSM_MAP_TRANSPORTMAP = "TransportMap"; //NOXLATE
-        const string OSM_MAP_CYCLEMAP = "CycleMap"; //NOXLATE
-
         private MapCtrl()
         {
             InitializeComponent();
-            cmbSelectionColor.ResetColors();
-            this.Disposed += new EventHandler(OnDisposed);
         }
 
-        private IMap _map;
+        private IMapWidget _widget;
         private IMapGroup _group;
-        private IMapView _initialView;
+        private IApplicationDefinition _appDef;
+        private IEditorService _edSvc;
 
-        private Dictionary<string, CmsMap> _cmsMaps;
-
-        class CmsMap : IMap
+        class MapModel
         {
-            internal IMap WrappedInstance { get { return _map; } }
-
-            public bool IsEnabled { get; set; }
-
             private IMap _map;
 
-            public CmsMap(IMap map) { _map = map; }
-
-            public string Type
+            public MapModel(IMap map)
             {
-                get
-                {
-                    return _map.Type;
-                }
-                set
-                {
-                    _map.Type = value;
-                }
+                _map = map;
             }
 
-            public bool SingleTile
+            public IMap Map
             {
-                get
-                {
-                    return _map.SingleTile;
-                }
-                set
-                {
-                    _map.SingleTile = value;
-                }
+                get { return _map; }
             }
 
-            public event PropertyChangedEventHandler PropertyChanged;
-
-            public IExtension Extension
+            public override string ToString()
             {
-                get { return _map.Extension; }
-            }
-
-
-            public ICmsMapOptions CmsMapOptions
-            {
-                get
+                var mgOpts = _map.OverlayOptions;
+                var cmsOpts = _map.CmsMapOptions;
+                if (cmsOpts != null)
                 {
-                    return _map.CmsMapOptions;
+                    if (string.IsNullOrEmpty(_map.Type))
+                        return Strings.CmsGeneric;
+                    else
+                        return _map.Type + " (" + cmsOpts.Type + ")";
                 }
-                set
+                else if (mgOpts != null)
                 {
-                    _map.CmsMapOptions = value;
+                    return _map.Type;
                 }
-            }
-
-            public ICmsMapOptions CreateOptions(string name, string type)
-            {
-                return _map.CreateOptions(name, type);
-            }
-
-
-            public IMapGuideOverlayOptions OverlayOptions
-            {
-                get
+                else if (string.IsNullOrEmpty(_map.Type))
                 {
-                    return _map.OverlayOptions;
+                    return Strings.CmsGeneric;
                 }
-                set
+                else
                 {
-                    _map.OverlayOptions = value;
+                    return _map.Type;
                 }
             }
-
-            public IMapGuideOverlayOptions CreateOverlayOptions(bool isBaseLayer, bool useOverlay, string projection)
-            {
-                return _map.CreateOverlayOptions(isBaseLayer, useOverlay, projection);
-            }
         }
 
-        private bool _noEvents = true;
-        private IApplicationDefinition _appDef;
-        private IEditorService _edsvc;
-        private IMapWidget _widget;
+        private BindingList<MapModel> _models;
 
         public MapCtrl(IApplicationDefinition appDef, IMapGroup group, IEditorService edService, IMapWidget widget) : this() 
         {
-            _edsvc = edService;
-            _edsvc.RegisterCustomNotifier(this);
             _appDef = appDef;
-            _group = group;
             _widget = widget;
-
-            foreach (var map in group.Map)
+            _group = group;
+            _edSvc = edService;
+            _edSvc.RegisterCustomNotifier(this);
+            _models = new BindingList<MapModel>();
+            lstMaps.DataSource = _models;
+            foreach (var m in group.Map.Select(x => new MapModel(x)))
             {
-                if (map.Type.Equals("MapGuide")) //NOXLATE
-                {
-                    _map = map;
-                }
-                else
-                {
-                    var cmsOpts = map.CmsMapOptions;
-                    if (cmsOpts != null)
-                    {
-                        switch (cmsOpts.Type)
-                        {
-                            case G_HYBRID_MAP:
-                                chkGoogHybrid.Checked = true;
-                                break;
-                            case G_NORMAL_MAP:
-                                chkGoogStreets.Checked = true;
-                                break;
-                            case G_SATELLITE_MAP:
-                                chkGoogSatellite.Checked = true;
-                                break;
-                            case G_PHYSICAL_MAP:
-                                chkGoogTerrain.Checked = true;
-                                break;
-                            case BING_AERIAL:
-                                chkBingSatellite.Checked = true;
-                                break;
-                            case BING_HYBRID:
-                                chkBingHybrid.Checked = true;
-                                break;
-                            case BING_ROAD:
-                                chkBingStreets.Checked = true;
-                                break;
-                            case YAHOO_MAP_HYB:
-                                chkYahooHybrid.Checked = true;
-                                break;
-                            case YAHOO_MAP_REG:
-                                chkYahooStreets.Checked = true;
-                                break;
-                            case YAHOO_MAP_SAT:
-                                chkYahooSatellite.Checked = true;
-                                break;
-                        }
-                    }
-                }
+                _models.Add(m);
             }
+            txtMapId.Text = _widget.MapId;
 
-            string googUrl = _appDef.GetValue("GoogleScript"); //NOXLATE
-            string yahooUrl = _appDef.GetValue("YahooScript"); //NOXLATE
-
-            if (!string.IsNullOrEmpty(yahooUrl))
-            {
-                txtYahooApiKey.Text = yahooUrl.Substring(YAHOO_URL.Length);
-            }
-            EvaluateCmsStates();
-
-            _initialView = _group.InitialView;
-            _cmsMaps = new Dictionary<string, CmsMap>();
-            chkOverride.Checked = (_initialView != null);
-
-            InitCmsMaps(group);
-            Debug.Assert(_cmsMaps.Count == 13);
-
-            if (_initialView == null)
-                _initialView = group.CreateInitialView(0.0, 0.0, 0.0);
-
-            txtViewX.Text = _initialView.CenterX.ToString(CultureInfo.InvariantCulture);
-            txtViewY.Text = _initialView.CenterY.ToString(CultureInfo.InvariantCulture);
-            txtViewScale.Text = _initialView.Scale.ToString(CultureInfo.InvariantCulture);
-
-            txtViewX.TextChanged += (s, e) =>
-            {
-                double d;
-                if (double.TryParse(txtViewX.Text, out d))
-                {
-                    _initialView.CenterX = d;
-                    OnResourceChanged();
-                }
-            };
-            txtViewY.TextChanged += (s, e) =>
-            {
-                double d;
-                if (double.TryParse(txtViewY.Text, out d))
-                {
-                    _initialView.CenterY = d;
-                    OnResourceChanged();
-                }
-            };
-            txtViewScale.TextChanged += (s, e) =>
-            {
-                double d;
-                if (double.TryParse(txtViewScale.Text, out d))
-                {
-                    _initialView.Scale = d;
-                    OnResourceChanged();
-                }
-            };
-
-            TextBoxBinder.BindText(txtMapId, group, "id"); //NOXLATE
-
-            txtMapDefinition.Text = _map.GetMapDefinition();
-            txtMapDefinition.TextChanged += (s, e) => 
-            { 
-                _map.SetMapDefinition(txtMapDefinition.Text);
-                OnResourceChanged();
-            };
-
-            CheckBoxBinder.BindChecked(chkSingleTiled, _map, "SingleTile"); //NOXLATE
-
-            var selOverlay = _map.GetValue("SelectionAsOverlay"); //NOXLATE
-            var selColor = _map.GetValue("SelectionColor"); //NOXLATE
-
-            if (!string.IsNullOrEmpty(selColor))
-                cmbSelectionColor.CurrentColor = Utility.ParseHTMLColorRGBA(selColor.Substring(2)); //Strip the "0x" part
-            
-            if (!string.IsNullOrEmpty(selOverlay))
-            {
-                bool b = true;
-                if (bool.TryParse(selOverlay, out b))
-                    chkSelectionAsOverlay.Checked = b;
-            }
-
-            cmbSelectionColor.SelectedIndexChanged += (s, e) => 
-            {
-                _map.SetValue("SelectionColor", "0x" + Utility.SerializeHTMLColorRGBA(cmbSelectionColor.CurrentColor, true)); //NOXLATE
-                OnResourceChanged();
-            };
-            chkSelectionAsOverlay.CheckedChanged += (s, e) => 
-            {
-                _map.SetValue("SelectionAsOverlay", chkSelectionAsOverlay.Checked.ToString().ToLower()); //NOXLATE
-                OnResourceChanged();
-            };
-            
-            _noEvents = false;
+            LoadMapOptions();
         }
 
-        void OnDisposed(object sender, EventArgs e)
+        private void LoadMapOptions()
         {
-            var handler = this.ResourceChanged;
-            if (handler != null)
+            foreach (var option in EditorFactory.GetAvailableOptions(_group))
             {
-                foreach (var h in handler.GetInvocationList())
+                var ed = option;
+                btnNewMap.DropDown.Items.Add(ed.Name, null, (s, e) =>
                 {
-                    this.ResourceChanged -= (EventHandler)h;
-                }
-                this.ResourceChanged = null;
+                    var map = ed.Action();
+                    _group.AddMap(map);
+                    _models.Add(new MapModel(map));
+                });
             }
         }
 
-        private void InitCmsMaps(IMapGroup group)
-        {
-            foreach (var map in group.Map)
-            {
-                var opts = map.CmsMapOptions;
-                if (opts != null && !_cmsMaps.ContainsKey(opts.Type))
-                {
-                    _cmsMaps[opts.Type] = new CmsMap(map) { IsEnabled = true };
-                }
-            }
-
-            //Check for maps unaccounted for, these will be disabled
-            if (!_cmsMaps.ContainsKey(G_HYBRID_MAP))
-                _cmsMaps[G_HYBRID_MAP] = new CmsMap(group.CreateCmsMapEntry(Type_Google, true, Strings.CmsGoogleHybrid, G_HYBRID_MAP)) { IsEnabled = false };
-            if (!_cmsMaps.ContainsKey(G_NORMAL_MAP))
-                _cmsMaps[G_NORMAL_MAP] = new CmsMap(group.CreateCmsMapEntry(Type_Google, true, Strings.CmsGoogleStreets, G_NORMAL_MAP)) { IsEnabled = false };
-            if (!_cmsMaps.ContainsKey(G_SATELLITE_MAP))
-                _cmsMaps[G_SATELLITE_MAP] = new CmsMap(group.CreateCmsMapEntry(Type_Google, true, Strings.CmsGoogleSatellite, G_SATELLITE_MAP)) { IsEnabled = false };
-            if (!_cmsMaps.ContainsKey(G_PHYSICAL_MAP))
-                _cmsMaps[G_PHYSICAL_MAP] = new CmsMap(group.CreateCmsMapEntry(Type_Google, true, Strings.CmsGooglePhysical, G_PHYSICAL_MAP)) { IsEnabled = false };
-            if (!_cmsMaps.ContainsKey(YAHOO_MAP_HYB))
-                _cmsMaps[YAHOO_MAP_HYB] = new CmsMap(group.CreateCmsMapEntry(Type_Yahoo, true, Strings.CmsYahooHybrid, YAHOO_MAP_HYB)) { IsEnabled = false };
-            if (!_cmsMaps.ContainsKey(YAHOO_MAP_REG))
-                _cmsMaps[YAHOO_MAP_REG] = new CmsMap(group.CreateCmsMapEntry(Type_Yahoo, true, Strings.CmsYahooStreet, YAHOO_MAP_REG)) { IsEnabled = false };
-            if (!_cmsMaps.ContainsKey(YAHOO_MAP_SAT))
-                _cmsMaps[YAHOO_MAP_SAT] = new CmsMap(group.CreateCmsMapEntry(Type_Yahoo, true, Strings.CmsYahooSatellite, YAHOO_MAP_SAT)) { IsEnabled = false };
-            if (!_cmsMaps.ContainsKey(BING_ROAD))
-                _cmsMaps[BING_ROAD] = new CmsMap(group.CreateCmsMapEntry(Type_Bing, true, Strings.CmsBingStreet, BING_ROAD)) { IsEnabled = false };
-            if (!_cmsMaps.ContainsKey(BING_AERIAL))
-                _cmsMaps[BING_AERIAL] = new CmsMap(group.CreateCmsMapEntry(Type_Bing, true, Strings.CmsBingSatellite, BING_AERIAL)) { IsEnabled = false };
-            if (!_cmsMaps.ContainsKey(BING_HYBRID))
-                _cmsMaps[BING_HYBRID] = new CmsMap(group.CreateCmsMapEntry(Type_Bing, true, Strings.CmsBingHybrid, BING_HYBRID)) { IsEnabled = false };
-            if (!_cmsMaps.ContainsKey(OSM_MAP_MAPNIK))
-                _cmsMaps[OSM_MAP_MAPNIK] = new CmsMap(group.CreateCmsMapEntry(Type_OSM, true, Strings.CmsOsm, OSM_MAP_MAPNIK)) { IsEnabled = false };
-            if (!_cmsMaps.ContainsKey(OSM_MAP_TRANSPORTMAP))
-                _cmsMaps[OSM_MAP_TRANSPORTMAP] = new CmsMap(group.CreateCmsMapEntry(Type_OSM, true, Strings.CmsOsmTransport, OSM_MAP_TRANSPORTMAP)) { IsEnabled = false };
-            if (!_cmsMaps.ContainsKey(OSM_MAP_CYCLEMAP))
-                _cmsMaps[OSM_MAP_CYCLEMAP] = new CmsMap(group.CreateCmsMapEntry(Type_OSM, true, Strings.CmsOsmCycle, OSM_MAP_CYCLEMAP)) { IsEnabled = false };
-        }
-
-        private void chkOverride_CheckedChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            if (chkOverride.Checked)
-                _group.InitialView = _initialView;
-            else
-                _group.InitialView = null;
-
-            OnResourceChanged();
-        }
-
-        private void btnBrowseMdf_Click(object sender, EventArgs e)
-        {
-            using (var picker = new ResourcePicker(_edsvc.CurrentConnection, ResourceTypes.MapDefinition.ToString(), ResourcePickerMode.OpenResource))
-            {
-                if (picker.ShowDialog() == DialogResult.OK)
-                {
-                    LastSelectedFolder.FolderId = picker.SelectedFolder;
-                    txtMapDefinition.Text = picker.ResourceID;
-                    OnResourceChanged();
-                }
-            }
-        }
-
-        private void SetCmsAvailability(string olType, bool enabled)
-        {
-            Trace.TraceInformation("Setting availability of CMS provider ({0}) to {1}", olType, enabled); //NOXLATE
-            if (_cmsMaps.ContainsKey(olType))
-            {
-                var map = _cmsMaps[olType];
-                if (map.IsEnabled != enabled)
-                {
-                    map.IsEnabled = enabled;
-                    if (enabled) //add
-                    {
-                        _group.AddMap(_cmsMaps[olType].WrappedInstance);
-                    }
-                    else //remove
-                    {
-                        IMap remove = null;
-                        foreach (IMap m in _group.Map)
-                        {
-                            var opt = m.CmsMapOptions;
-                            if (opt != null && opt.Type == olType)
-                            {
-                                remove = m;
-                                break;
-                            }
-                        }
-
-                        if (remove != null)
-                            _group.RemoveMap(remove);
-                    }
-                }
-            }
-
-            if (IsUsingCmsLayers())
-                _map.OverlayOptions = _map.CreateOverlayOptions(false, true, "EPSG:900913"); //NOXLATE
-            else
-                _map.OverlayOptions = null;
-
-            OnResourceChanged();
-        }
-
-        private bool IsUsingCmsLayers()
-        {
-            foreach (var map in _cmsMaps.Values)
-            {
-                if (map.IsEnabled)
-                    return true;
-            }
-
-            return false;
-        }
-
-        private void chkBingStreets_CheckedChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            if (chkBingStreets.Checked)
-                _appDef.SetValue("VirtualEarthScript", BING_URL); //NOXLATE
-            SetCmsAvailability(BING_ROAD, chkBingStreets.Checked);
-        }
-
-        private void chkBingSatellite_CheckedChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            if (chkBingSatellite.Checked)
-                _appDef.SetValue("VirtualEarthScript", BING_URL); //NOXLATE
-            SetCmsAvailability(BING_AERIAL, chkBingSatellite.Checked);
-        }
-
-        private void chkBingHybrid_CheckedChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            if (chkBingHybrid.Checked)
-                _appDef.SetValue("VirtualEarthScript", BING_URL); //NOXLATE
-            SetCmsAvailability(BING_HYBRID, chkBingHybrid.Checked);
-        }
-
-        private void chkGoogStreets_CheckedChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            if (chkGoogStreets.Checked)
-                _appDef.SetValue("GoogleScript", GOOGLE_URL); //NOXLATE
-            SetCmsAvailability(G_NORMAL_MAP, chkGoogStreets.Checked);
-        }
-
-        private void chkGoogSatellite_CheckedChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            if (chkGoogSatellite.Checked)
-                _appDef.SetValue("GoogleScript", GOOGLE_URL); //NOXLATE
-            SetCmsAvailability(G_SATELLITE_MAP, chkGoogSatellite.Checked);
-        }
-
-        private void chkGoogHybrid_CheckedChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            if (chkGoogHybrid.Checked)
-                _appDef.SetValue("GoogleScript", GOOGLE_URL); //NOXLATE
-            SetCmsAvailability(G_HYBRID_MAP, chkGoogHybrid.Checked);
-        }
-
-        private void chkGoogTerrain_CheckedChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            if (chkGoogTerrain.Checked)
-                _appDef.SetValue("GoogleScript", GOOGLE_URL); //NOXLATE
-            SetCmsAvailability(G_PHYSICAL_MAP, chkGoogTerrain.Checked);
-        }
-
-        private void chkYahooStreets_CheckedChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            SetCmsAvailability(YAHOO_MAP_REG, chkYahooStreets.Checked);
-            EvaluateCmsStates();
-        }
-
-        private void chkYahooSatellite_CheckedChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            SetCmsAvailability(YAHOO_MAP_SAT, chkYahooSatellite.Checked);
-            EvaluateCmsStates();
-        }
-
-        private void chkYahooHybrid_CheckedChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            SetCmsAvailability(YAHOO_MAP_HYB, chkYahooHybrid.Checked);
-            EvaluateCmsStates();
-        }
-
-        private void chkOsmMapnik_CheckedChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            if (chkOsmMapnik.Checked)
-                _appDef.SetValue("OpenStreetMapScript", OSM_URL); //NOXLATE
-            SetCmsAvailability(OSM_MAP_MAPNIK, chkOsmMapnik.Checked);
-        }
-
-        private void chkOsmTransportMap_CheckedChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            if (chkOsmTransportMap.Checked)
-                _appDef.SetValue("OpenStreetMapScript", OSM_URL); //NOXLATE
-            SetCmsAvailability(OSM_MAP_TRANSPORTMAP, chkOsmTransportMap.Checked);
-        }
-
-        private void chkOsmCycleMap_CheckedChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            if (chkOsmCycleMap.Checked)
-                _appDef.SetValue("OpenStreetMapScript", OSM_URL); //NOXLATE
-            SetCmsAvailability(OSM_MAP_CYCLEMAP, chkOsmCycleMap.Checked);
-        }
-
-        private void EvaluateCmsStates()
-        {
-            txtYahooApiKey.Enabled = IsYahooMapsEnabled();
-        }
-
-        private bool IsGoogleMapsEnabled()
-        {
-            return chkGoogHybrid.Checked ||
-                   chkGoogSatellite.Checked ||
-                   chkGoogStreets.Checked ||
-                   chkGoogTerrain.Checked;
-        }
-
-        private bool IsYahooMapsEnabled()
-        {
-            return chkYahooHybrid.Checked ||
-                   chkYahooSatellite.Checked ||
-                   chkYahooStreets.Checked;
-        }
-
-        private void txtYahooApiKey_TextChanged(object sender, EventArgs e)
-        {
-            if (_noEvents)
-                return;
-
-            _appDef.SetValue("YahooScript", YAHOO_URL + txtYahooApiKey.Text); //NOXLATE
-        }
-
-        const string OSM_URL = "http://www.openstreetmap.org/openlayers/OpenStreetMap.js"; //NOXLATE
-        const string GOOGLE_URL = "http://maps.google.com/maps/api/js?sensor=false"; //NOXLATE
-        const string YAHOO_URL = "http://api.maps.yahoo.com/ajaxymap?v=3.0&appid="; //NOXLATE
-        const string BING_URL = "http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2"; //NOXLATE
-
         private void OnResourceChanged()
         {
             var handler = this.ResourceChanged;
@@ -602,8 +135,22 @@
 
         private void txtMapId_TextChanged(object sender, EventArgs e)
         {
-            if (_widget != null)
+            if (_widget != null && txtMapId.Text != _widget.MapId)
+            {
                 _widget.MapId = txtMapId.Text;
+            }
         }
+
+        private void lstMaps_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            var map = lstMaps.SelectedItem as MapModel;
+            if (map != null)
+            {
+                grpChildMap.Controls.Clear();
+                var control = EditorFactory.GetEditor(_edSvc, _group, map.Map);
+                control.Dock = DockStyle.Fill;
+                grpChildMap.Controls.Add(control);
+            }
+        }
     }
 }

Modified: trunk/Tools/Maestro/Maestro.Editors/Fusion/MapCtrl.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Fusion/MapCtrl.resx	2014-06-18 08:37:30 UTC (rev 8241)
+++ trunk/Tools/Maestro/Maestro.Editors/Fusion/MapCtrl.resx	2014-06-18 09:02:42 UTC (rev 8242)
@@ -148,7 +148,7 @@
     <value>groupBox2</value>
   </data>
   <data name=">>label1.ZOrder" xml:space="preserve">
-    <value>2</value>
+    <value>1</value>
   </data>
   <data name="txtMapId.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Left, Right</value>
@@ -174,419 +174,20 @@
   <data name=">>txtMapId.ZOrder" xml:space="preserve">
     <value>0</value>
   </data>
-  <data name="groupBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+  <data name="groupBox2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Left, Right</value>
   </data>
-  <data name="chkOverride.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="chkOverride.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
-  </data>
-  <data name="chkOverride.Location" type="System.Drawing.Point, System.Drawing">
-    <value>6, 0</value>
-  </data>
-  <data name="chkOverride.Size" type="System.Drawing.Size, System.Drawing">
-    <value>119, 17</value>
-  </data>
-  <data name="chkOverride.TabIndex" type="System.Int32, mscorlib">
-    <value>6</value>
-  </data>
-  <data name="chkOverride.Text" xml:space="preserve">
-    <value>Override Initial View</value>
-  </data>
-  <data name=">>chkOverride.Name" xml:space="preserve">
-    <value>chkOverride</value>
-  </data>
-  <data name=">>chkOverride.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>chkOverride.Parent" xml:space="preserve">
-    <value>groupBox1</value>
-  </data>
-  <data name=">>chkOverride.ZOrder" xml:space="preserve">
-    <value>0</value>
-  </data>
-  <data name="txtViewScale.Location" type="System.Drawing.Point, System.Drawing">
-    <value>321, 23</value>
-  </data>
-  <data name="txtViewScale.Size" type="System.Drawing.Size, System.Drawing">
-    <value>92, 20</value>
-  </data>
-  <data name="txtViewScale.TabIndex" type="System.Int32, mscorlib">
-    <value>5</value>
-  </data>
-  <data name=">>txtViewScale.Name" xml:space="preserve">
-    <value>txtViewScale</value>
-  </data>
-  <data name=">>txtViewScale.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>txtViewScale.Parent" xml:space="preserve">
-    <value>groupBox1</value>
-  </data>
-  <data name=">>txtViewScale.ZOrder" xml:space="preserve">
-    <value>1</value>
-  </data>
-  <data name="txtViewY.Location" type="System.Drawing.Point, System.Drawing">
-    <value>180, 23</value>
-  </data>
-  <data name="txtViewY.Size" type="System.Drawing.Size, System.Drawing">
-    <value>80, 20</value>
-  </data>
-  <data name="txtViewY.TabIndex" type="System.Int32, mscorlib">
-    <value>4</value>
-  </data>
-  <data name=">>txtViewY.Name" xml:space="preserve">
-    <value>txtViewY</value>
-  </data>
-  <data name=">>txtViewY.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>txtViewY.Parent" xml:space="preserve">
-    <value>groupBox1</value>
-  </data>
-  <data name=">>txtViewY.ZOrder" xml:space="preserve">
-    <value>2</value>
-  </data>
-  <data name="txtViewX.Location" type="System.Drawing.Point, System.Drawing">
-    <value>54, 23</value>
-  </data>
-  <data name="txtViewX.Size" type="System.Drawing.Size, System.Drawing">
-    <value>80, 20</value>
-  </data>
-  <data name="txtViewX.TabIndex" type="System.Int32, mscorlib">
-    <value>3</value>
-  </data>
-  <data name=">>txtViewX.Name" xml:space="preserve">
-    <value>txtViewX</value>
-  </data>
-  <data name=">>txtViewX.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>txtViewX.Parent" xml:space="preserve">
-    <value>groupBox1</value>
-  </data>
-  <data name=">>txtViewX.ZOrder" xml:space="preserve">
-    <value>3</value>
-  </data>
-  <data name="label4.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</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>272, 26</value>
-  </data>
-  <data name="label4.Size" type="System.Drawing.Size, System.Drawing">
-    <value>34, 13</value>
-  </data>
-  <data name="label4.TabIndex" type="System.Int32, mscorlib">
-    <value>2</value>
-  </data>
-  <data name="label4.Text" xml:space="preserve">
-    <value>Scale</value>
-  </data>
-  <data name=">>label4.Name" xml:space="preserve">
-    <value>label4</value>
-  </data>
-  <data name=">>label4.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>label4.Parent" xml:space="preserve">
-    <value>groupBox1</value>
-  </data>
-  <data name=">>label4.ZOrder" xml:space="preserve">
-    <value>4</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>148, 26</value>
-  </data>
-  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
-    <value>14, 13</value>
-  </data>
-  <data name="label3.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
-  </data>
-  <data name="label3.Text" xml:space="preserve">
-    <value>Y</value>
-  </data>
-  <data name=">>label3.Name" xml:space="preserve">
-    <value>label3</value>
-  </data>
-  <data name=">>label3.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>label3.Parent" xml:space="preserve">
-    <value>groupBox1</value>
-  </data>
-  <data name=">>label3.ZOrder" xml:space="preserve">
-    <value>5</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>21, 26</value>
-  </data>
-  <data name="label2.Size" type="System.Drawing.Size, System.Drawing">
-    <value>14, 13</value>
-  </data>
-  <data name="label2.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
-  </data>
-  <data name="label2.Text" xml:space="preserve">
-    <value>X</value>
-  </data>
-  <data name=">>label2.Name" xml:space="preserve">
-    <value>label2</value>
-  </data>
-  <data name=">>label2.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>label2.Parent" xml:space="preserve">
-    <value>groupBox1</value>
-  </data>
-  <data name=">>label2.ZOrder" xml:space="preserve">
-    <value>6</value>
-  </data>
-  <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
-    <value>17, 75</value>
-  </data>
-  <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
-    <value>449, 56</value>
-  </data>
-  <data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
-    <value>2</value>
-  </data>
-  <data name=">>groupBox1.Name" xml:space="preserve">
-    <value>groupBox1</value>
-  </data>
-  <data name=">>groupBox1.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>groupBox1.Parent" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>groupBox1.ZOrder" xml:space="preserve">
-    <value>4</value>
-  </data>
-  <data name="label5.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="label5.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
-  </data>
-  <data name="label5.Location" type="System.Drawing.Point, System.Drawing">
-    <value>14, 51</value>
-  </data>
-  <data name="label5.Size" type="System.Drawing.Size, System.Drawing">
-    <value>75, 13</value>
-  </data>
-  <data name="label5.TabIndex" type="System.Int32, mscorlib">
-    <value>3</value>
-  </data>
-  <data name="label5.Text" xml:space="preserve">
-    <value>Map Definition</value>
-  </data>
-  <data name=">>label5.Name" xml:space="preserve">
-    <value>label5</value>
-  </data>
-  <data name=">>label5.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>label5.Parent" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>label5.ZOrder" xml:space="preserve">
-    <value>6</value>
-  </data>
-  <data name="txtMapDefinition.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Left, Right</value>
-  </data>
-  <data name="txtMapDefinition.Location" type="System.Drawing.Point, System.Drawing">
-    <value>107, 48</value>
-  </data>
-  <data name="txtMapDefinition.Size" type="System.Drawing.Size, System.Drawing">
-    <value>324, 20</value>
-  </data>
-  <data name="txtMapDefinition.TabIndex" type="System.Int32, mscorlib">
-    <value>4</value>
-  </data>
-  <data name=">>txtMapDefinition.Name" xml:space="preserve">
-    <value>txtMapDefinition</value>
-  </data>
-  <data name=">>txtMapDefinition.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>txtMapDefinition.Parent" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>txtMapDefinition.ZOrder" xml:space="preserve">
-    <value>8</value>
-  </data>
-  <data name="btnBrowseMdf.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
-  <data name="btnBrowseMdf.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
-  </data>
-  <data name="btnBrowseMdf.Location" type="System.Drawing.Point, System.Drawing">
-    <value>437, 46</value>
-  </data>
-  <data name="btnBrowseMdf.Size" type="System.Drawing.Size, System.Drawing">
-    <value>29, 23</value>
-  </data>
-  <data name="btnBrowseMdf.TabIndex" type="System.Int32, mscorlib">
-    <value>5</value>
-  </data>
-  <data name="btnBrowseMdf.Text" xml:space="preserve">
-    <value>...</value>
-  </data>
-  <data name=">>btnBrowseMdf.Name" xml:space="preserve">
-    <value>btnBrowseMdf</value>
-  </data>
-  <data name=">>btnBrowseMdf.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>btnBrowseMdf.Parent" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>btnBrowseMdf.ZOrder" xml:space="preserve">
-    <value>9</value>
-  </data>
-  <data name="chkSingleTiled.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="chkSingleTiled.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
-  </data>
-  <data name="chkSingleTiled.Location" type="System.Drawing.Point, System.Drawing">
-    <value>234, 139</value>
-  </data>
-  <data name="chkSingleTiled.Size" type="System.Drawing.Size, System.Drawing">
-    <value>75, 17</value>
-  </data>
-  <data name="chkSingleTiled.TabIndex" type="System.Int32, mscorlib">
-    <value>8</value>
-  </data>
-  <data name="chkSingleTiled.Text" xml:space="preserve">
-    <value>Single Tile</value>
-  </data>
-  <data name=">>chkSingleTiled.Name" xml:space="preserve">
-    <value>chkSingleTiled</value>
-  </data>
-  <data name=">>chkSingleTiled.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>chkSingleTiled.Parent" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>chkSingleTiled.ZOrder" xml:space="preserve">
-    <value>7</value>
-  </data>
-  <data name="lblSelColor.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="lblSelColor.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
-  </data>
-  <data name="lblSelColor.Location" type="System.Drawing.Point, System.Drawing">
-    <value>17, 140</value>
-  </data>
-  <data name="lblSelColor.Size" type="System.Drawing.Size, System.Drawing">
-    <value>78, 13</value>
-  </data>
-  <data name="lblSelColor.TabIndex" type="System.Int32, mscorlib">
-    <value>9</value>
-  </data>
-  <data name="lblSelColor.Text" xml:space="preserve">
-    <value>Selection Color</value>
-  </data>
-  <data name=">>lblSelColor.Name" xml:space="preserve">
-    <value>lblSelColor</value>
-  </data>
-  <data name=">>lblSelColor.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>lblSelColor.Parent" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>lblSelColor.ZOrder" xml:space="preserve">
-    <value>5</value>
-  </data>
-  <data name="chkSelectionAsOverlay.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="chkSelectionAsOverlay.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
-  </data>
-  <data name="chkSelectionAsOverlay.Location" type="System.Drawing.Point, System.Drawing">
-    <value>327, 139</value>
-  </data>
-  <data name="chkSelectionAsOverlay.Size" type="System.Drawing.Size, System.Drawing">
-    <value>124, 17</value>
-  </data>
-  <data name="chkSelectionAsOverlay.TabIndex" type="System.Int32, mscorlib">
-    <value>11</value>
-  </data>
-  <data name="chkSelectionAsOverlay.Text" xml:space="preserve">
-    <value>Selection As Overlay</value>
-  </data>
-  <data name=">>chkSelectionAsOverlay.Name" xml:space="preserve">
-    <value>chkSelectionAsOverlay</value>
-  </data>
-  <data name=">>chkSelectionAsOverlay.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>chkSelectionAsOverlay.Parent" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>chkSelectionAsOverlay.ZOrder" xml:space="preserve">
-    <value>1</value>
-  </data>
-  <data name="cmbSelectionColor.Location" type="System.Drawing.Point, System.Drawing">
-    <value>107, 137</value>
-  </data>
-  <data name="cmbSelectionColor.Size" type="System.Drawing.Size, System.Drawing">
-    <value>121, 21</value>
-  </data>
-  <data name="cmbSelectionColor.TabIndex" type="System.Int32, mscorlib">
-    <value>10</value>
-  </data>
-  <data name=">>cmbSelectionColor.Name" xml:space="preserve">
-    <value>cmbSelectionColor</value>
-  </data>
-  <data name=">>cmbSelectionColor.Type" xml:space="preserve">
-    <value>Maestro.Editors.Common.ColorComboBox, Maestro.Editors, Version=5.0.0.6640, Culture=neutral, PublicKeyToken=f526c48929fda856</value>
-  </data>
-  <data name=">>cmbSelectionColor.Parent" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>cmbSelectionColor.ZOrder" xml:space="preserve">
-    <value>3</value>
-  </data>
   <data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
     <value>3, 3</value>
   </data>
   <data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
-    <value>486, 176</value>
+    <value>486, 52</value>
   </data>
   <data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
     <value>12</value>
   </data>
   <data name="groupBox2.Text" xml:space="preserve">
-    <value>Map Settings</value>
+    <value>Map Group Settings</value>
   </data>
   <data name=">>groupBox2.Name" xml:space="preserve">
     <value>groupBox2</value>
@@ -598,587 +199,197 @@
     <value>$this</value>
   </data>
   <data name=">>groupBox2.ZOrder" xml:space="preserve">
-    <value>1</value>
+    <value>2</value>
   </data>
-  <data name="grpCms.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Bottom, Left, Right</value>
+  <data name="groupBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left</value>
   </data>
-  <data name="chkOsmMapnik.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="lstMaps.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
   </data>
-  <data name="chkOsmMapnik.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="lstMaps.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 41</value>
   </data>
-  <data name="chkOsmMapnik.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 19</value>
+  <data name="lstMaps.Size" type="System.Drawing.Size, System.Drawing">
+    <value>152, 318</value>
   </data>
-  <data name="chkOsmMapnik.Size" type="System.Drawing.Size, System.Drawing">
-    <value>61, 17</value>
+  <data name="lstMaps.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
   </data>
-  <data name="chkOsmMapnik.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
+  <data name=">>lstMaps.Name" xml:space="preserve">
+    <value>lstMaps</value>
   </data>
-  <data name="chkOsmMapnik.Text" xml:space="preserve">
-    <value>Mapnik</value>
+  <data name=">>lstMaps.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name=">>chkOsmMapnik.Name" xml:space="preserve">
-    <value>chkOsmMapnik</value>
+  <data name=">>lstMaps.Parent" xml:space="preserve">
+    <value>groupBox1</value>
   </data>
-  <data name=">>chkOsmMapnik.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>chkOsmMapnik.Parent" xml:space="preserve">
-    <value>groupBox6</value>
-  </data>
-  <data name=">>chkOsmMapnik.ZOrder" xml:space="preserve">
+  <data name=">>lstMaps.ZOrder" xml:space="preserve">
     <value>0</value>
   </data>
-  <data name="chkOsmTransportMap.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="btnNewMap.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
   </data>
-  <data name="chkOsmTransportMap.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="btnNewMap.Size" type="System.Drawing.Size, System.Drawing">
+    <value>32, 22</value>
   </data>
-  <data name="chkOsmTransportMap.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 43</value>
+  <data name="btnNewMap.Text" xml:space="preserve">
+    <value>Add New Map</value>
   </data>
-  <data name="chkOsmTransportMap.Size" type="System.Drawing.Size, System.Drawing">
-    <value>92, 17</value>
+  <data name="btnRemoveMap.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
   </data>
-  <data name="chkOsmTransportMap.TabIndex" type="System.Int32, mscorlib">
-    <value>4</value>
+  <data name="btnRemoveMap.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
   </data>
-  <data name="chkOsmTransportMap.Text" xml:space="preserve">
-    <value>TransportMap</value>
+  <data name="btnRemoveMap.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
   </data>
-  <data name=">>chkOsmTransportMap.Name" xml:space="preserve">
-    <value>chkOsmTransportMap</value>
+  <data name="btnRemoveMap.Text" xml:space="preserve">
+    <value>Remove Selected Map</value>
   </data>
-  <data name=">>chkOsmTransportMap.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>6, 25</value>
   </data>
-  <data name=">>chkOsmTransportMap.Parent" xml:space="preserve">
-    <value>groupBox6</value>
+  <data name="btnMapUp.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
   </data>
-  <data name=">>chkOsmTransportMap.ZOrder" xml:space="preserve">
-    <value>1</value>
+  <data name="btnMapUp.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
   </data>
-  <data name="chkOsmCycleMap.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="btnMapUp.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
   </data>
-  <data name="chkOsmCycleMap.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="btnMapUp.Text" xml:space="preserve">
+    <value>Move Up</value>
   </data>
-  <data name="chkOsmCycleMap.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 66</value>
+  <data name="btnMapDown.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
   </data>
-  <data name="chkOsmCycleMap.Size" type="System.Drawing.Size, System.Drawing">
-    <value>73, 17</value>
+  <data name="btnMapDown.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
   </data>
-  <data name="chkOsmCycleMap.TabIndex" type="System.Int32, mscorlib">
-    <value>5</value>
+  <data name="btnMapDown.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
   </data>
-  <data name="chkOsmCycleMap.Text" xml:space="preserve">
-    <value>CycleMap</value>
+  <data name="btnMapDown.Text" xml:space="preserve">
+    <value>Move Down</value>
   </data>
-  <data name=">>chkOsmCycleMap.Name" xml:space="preserve">
-    <value>chkOsmCycleMap</value>
+  <data name="toolStrip1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 16</value>
   </data>
-  <data name=">>chkOsmCycleMap.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="toolStrip1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>152, 25</value>
   </data>
-  <data name=">>chkOsmCycleMap.Parent" xml:space="preserve">
-    <value>groupBox6</value>
-  </data>
-  <data name=">>chkOsmCycleMap.ZOrder" xml:space="preserve">
-    <value>2</value>
-  </data>
-  <data name="groupBox6.Location" type="System.Drawing.Point, System.Drawing">
-    <value>350, 30</value>
-  </data>
-  <data name="groupBox6.Size" type="System.Drawing.Size, System.Drawing">
-    <value>115, 114</value>
-  </data>
-  <data name="groupBox6.TabIndex" type="System.Int32, mscorlib">
-    <value>14</value>
-  </data>
-  <data name="groupBox6.Text" xml:space="preserve">
-    <value>OpenStreetMap</value>
-  </data>
-  <data name=">>groupBox6.Name" xml:space="preserve">
-    <value>groupBox6</value>
-  </data>
-  <data name=">>groupBox6.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>groupBox6.Parent" xml:space="preserve">
-    <value>grpCms</value>
-  </data>
-  <data name=">>groupBox6.ZOrder" xml:space="preserve">
+  <data name="toolStrip1.TabIndex" type="System.Int32, mscorlib">
     <value>0</value>
   </data>
-  <data name="chkGoogTerrain.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="toolStrip1.Text" xml:space="preserve">
+    <value>toolStrip1</value>
   </data>
-  <data name="chkGoogTerrain.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name=">>toolStrip1.Name" xml:space="preserve">
+    <value>toolStrip1</value>
   </data>
-  <data name="chkGoogTerrain.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 89</value>
+  <data name=">>toolStrip1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="chkGoogTerrain.Size" type="System.Drawing.Size, System.Drawing">
-    <value>59, 17</value>
+  <data name=">>toolStrip1.Parent" xml:space="preserve">
+    <value>groupBox1</value>
   </data>
-  <data name="chkGoogTerrain.TabIndex" type="System.Int32, mscorlib">
-    <value>9</value>
-  </data>
-  <data name="chkGoogTerrain.Text" xml:space="preserve">
-    <value>Terrain</value>
-  </data>
-  <data name=">>chkGoogTerrain.Name" xml:space="preserve">
-    <value>chkGoogTerrain</value>
-  </data>
-  <data name=">>chkGoogTerrain.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>chkGoogTerrain.Parent" xml:space="preserve">
-    <value>groupBox5</value>
-  </data>
-  <data name=">>chkGoogTerrain.ZOrder" xml:space="preserve">
-    <value>0</value>
-  </data>
-  <data name="chkGoogStreets.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="chkGoogStreets.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
-  </data>
-  <data name="chkGoogStreets.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 19</value>
-  </data>
-  <data name="chkGoogStreets.Size" type="System.Drawing.Size, System.Drawing">
-    <value>59, 17</value>
-  </data>
-  <data name="chkGoogStreets.TabIndex" type="System.Int32, mscorlib">
-    <value>6</value>
-  </data>
-  <data name="chkGoogStreets.Text" xml:space="preserve">
-    <value>Streets</value>
-  </data>
-  <data name=">>chkGoogStreets.Name" xml:space="preserve">
-    <value>chkGoogStreets</value>
-  </data>
-  <data name=">>chkGoogStreets.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>chkGoogStreets.Parent" xml:space="preserve">
-    <value>groupBox5</value>
-  </data>
-  <data name=">>chkGoogStreets.ZOrder" xml:space="preserve">
+  <data name=">>toolStrip1.ZOrder" xml:space="preserve">
     <value>1</value>
   </data>
-  <data name="chkGoogSatellite.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 61</value>
   </data>
-  <data name="chkGoogSatellite.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>158, 362</value>
   </data>
-  <data name="chkGoogSatellite.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 43</value>
+  <data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
+    <value>13</value>
   </data>
-  <data name="chkGoogSatellite.Size" type="System.Drawing.Size, System.Drawing">
-    <value>63, 17</value>
+  <data name="groupBox1.Text" xml:space="preserve">
+    <value>Child Maps</value>
   </data>
-  <data name="chkGoogSatellite.TabIndex" type="System.Int32, mscorlib">
-    <value>7</value>
+  <data name=">>groupBox1.Name" xml:space="preserve">
+    <value>groupBox1</value>
   </data>
-  <data name="chkGoogSatellite.Text" xml:space="preserve">
-    <value>Satellite</value>
-  </data>
-  <data name=">>chkGoogSatellite.Name" xml:space="preserve">
-    <value>chkGoogSatellite</value>
-  </data>
-  <data name=">>chkGoogSatellite.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>chkGoogSatellite.Parent" xml:space="preserve">
-    <value>groupBox5</value>
-  </data>
-  <data name=">>chkGoogSatellite.ZOrder" xml:space="preserve">
-    <value>2</value>
-  </data>
-  <data name="chkGoogHybrid.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="chkGoogHybrid.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
-  </data>
-  <data name="chkGoogHybrid.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 66</value>
-  </data>
-  <data name="chkGoogHybrid.Size" type="System.Drawing.Size, System.Drawing">
-    <value>56, 17</value>
-  </data>
-  <data name="chkGoogHybrid.TabIndex" type="System.Int32, mscorlib">
-    <value>8</value>
-  </data>
-  <data name="chkGoogHybrid.Text" xml:space="preserve">
-    <value>Hybrid</value>
-  </data>
-  <data name=">>chkGoogHybrid.Name" xml:space="preserve">
-    <value>chkGoogHybrid</value>
-  </data>
-  <data name=">>chkGoogHybrid.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>chkGoogHybrid.Parent" xml:space="preserve">
-    <value>groupBox5</value>
-  </data>
-  <data name=">>chkGoogHybrid.ZOrder" xml:space="preserve">
-    <value>3</value>
-  </data>
-  <data name="groupBox5.Location" type="System.Drawing.Point, System.Drawing">
-    <value>132, 30</value>
-  </data>
-  <data name="groupBox5.Size" type="System.Drawing.Size, System.Drawing">
-    <value>114, 114</value>
-  </data>
-  <data name="groupBox5.TabIndex" type="System.Int32, mscorlib">
-    <value>15</value>
-  </data>
-  <data name="groupBox5.Text" xml:space="preserve">
-    <value>Google Maps V3</value>
-  </data>
-  <data name=">>groupBox5.Name" xml:space="preserve">
-    <value>groupBox5</value>
-  </data>
-  <data name=">>groupBox5.Type" xml:space="preserve">
+  <data name=">>groupBox1.Type" xml:space="preserve">
     <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name=">>groupBox5.Parent" xml:space="preserve">
-    <value>grpCms</value>
+  <data name=">>groupBox1.Parent" xml:space="preserve">
+    <value>$this</value>
   </data>
-  <data name=">>groupBox5.ZOrder" xml:space="preserve">
+  <data name=">>groupBox1.ZOrder" xml:space="preserve">
     <value>1</value>
   </data>
-  <data name="chkBingStreets.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="grpChildMap.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left, Right</value>
   </data>
-  <data name="chkBingStreets.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="grpChildMap.Location" type="System.Drawing.Point, System.Drawing">
+    <value>168, 62</value>
   </data>
-  <data name="chkBingStreets.Location" type="System.Drawing.Point, System.Drawing">
-    <value>13, 19</value>
+  <data name="grpChildMap.Size" type="System.Drawing.Size, System.Drawing">
+    <value>321, 361</value>
   </data>
-  <data name="chkBingStreets.Size" type="System.Drawing.Size, System.Drawing">
-    <value>59, 17</value>
-  </data>
-  <data name="chkBingStreets.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
-  </data>
-  <data name="chkBingStreets.Text" xml:space="preserve">
-    <value>Streets</value>
-  </data>
-  <data name=">>chkBingStreets.Name" xml:space="preserve">
-    <value>chkBingStreets</value>
-  </data>
-  <data name=">>chkBingStreets.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>chkBingStreets.Parent" xml:space="preserve">
-    <value>groupBox4</value>
-  </data>
-  <data name=">>chkBingStreets.ZOrder" xml:space="preserve">
-    <value>0</value>
-  </data>
-  <data name="chkBingSatellite.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="chkBingSatellite.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
-  </data>
-  <data name="chkBingSatellite.Location" type="System.Drawing.Point, System.Drawing">
-    <value>13, 43</value>
-  </data>
-  <data name="chkBingSatellite.Size" type="System.Drawing.Size, System.Drawing">
-    <value>63, 17</value>
-  </data>
-  <data name="chkBingSatellite.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
-  </data>
-  <data name="chkBingSatellite.Text" xml:space="preserve">
-    <value>Satellite</value>
-  </data>
-  <data name=">>chkBingSatellite.Name" xml:space="preserve">
-    <value>chkBingSatellite</value>
-  </data>
-  <data name=">>chkBingSatellite.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>chkBingSatellite.Parent" xml:space="preserve">
-    <value>groupBox4</value>
-  </data>
-  <data name=">>chkBingSatellite.ZOrder" xml:space="preserve">
-    <value>1</value>
-  </data>
-  <data name="chkBingHybrid.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="chkBingHybrid.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
-  </data>
-  <data name="chkBingHybrid.Location" type="System.Drawing.Point, System.Drawing">
-    <value>13, 66</value>
-  </data>
-  <data name="chkBingHybrid.Size" type="System.Drawing.Size, System.Drawing">
-    <value>56, 17</value>
-  </data>
-  <data name="chkBingHybrid.TabIndex" type="System.Int32, mscorlib">
-    <value>2</value>
-  </data>
-  <data name="chkBingHybrid.Text" xml:space="preserve">
-    <value>Hybrid</value>
-  </data>
-  <data name=">>chkBingHybrid.Name" xml:space="preserve">
-    <value>chkBingHybrid</value>
-  </data>
-  <data name=">>chkBingHybrid.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>chkBingHybrid.Parent" xml:space="preserve">
-    <value>groupBox4</value>
-  </data>
-  <data name=">>chkBingHybrid.ZOrder" xml:space="preserve">
-    <value>2</value>
-  </data>
-  <data name="groupBox4.Location" type="System.Drawing.Point, System.Drawing">
-    <value>23, 30</value>
-  </data>
-  <data name="groupBox4.Size" type="System.Drawing.Size, System.Drawing">
-    <value>99, 114</value>
-  </data>
-  <data name="groupBox4.TabIndex" type="System.Int32, mscorlib">
+  <data name="grpChildMap.TabIndex" type="System.Int32, mscorlib">
     <value>14</value>
   </data>
-  <data name="groupBox4.Text" xml:space="preserve">
-    <value>Bing Maps</value>
+  <data name="grpChildMap.Text" xml:space="preserve">
+    <value>Child Map Settings</value>
   </data>
-  <data name=">>groupBox4.Name" xml:space="preserve">
-    <value>groupBox4</value>
+  <data name=">>grpChildMap.Name" xml:space="preserve">
+    <value>grpChildMap</value>
   </data>
-  <data name=">>groupBox4.Type" xml:space="preserve">
+  <data name=">>grpChildMap.Type" xml:space="preserve">
     <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name=">>groupBox4.Parent" xml:space="preserve">
-    <value>grpCms</value>
+  <data name=">>grpChildMap.Parent" xml:space="preserve">
+    <value>$this</value>
   </data>
-  <data name=">>groupBox4.ZOrder" xml:space="preserve">
-    <value>2</value>
-  </data>
-  <data name="chkYahooStreets.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="chkYahooStreets.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
-  </data>
-  <data name="chkYahooStreets.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 19</value>
-  </data>
-  <data name="chkYahooStreets.Size" type="System.Drawing.Size, System.Drawing">
-    <value>59, 17</value>
-  </data>
-  <data name="chkYahooStreets.TabIndex" type="System.Int32, mscorlib">
-    <value>3</value>
-  </data>
-  <data name="chkYahooStreets.Text" xml:space="preserve">
-    <value>Streets</value>
-  </data>
-  <data name=">>chkYahooStreets.Name" xml:space="preserve">
-    <value>chkYahooStreets</value>
-  </data>
-  <data name=">>chkYahooStreets.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>chkYahooStreets.Parent" xml:space="preserve">
-    <value>groupBox3</value>
-  </data>
-  <data name=">>chkYahooStreets.ZOrder" xml:space="preserve">
+  <data name=">>grpChildMap.ZOrder" xml:space="preserve">
     <value>0</value>
   </data>
-  <data name="chkYahooSatellite.AutoSize" type="System.Boolean, mscorlib">
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
+  </metadata>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>492, 426</value>
   </data>
-  <data name="chkYahooSatellite.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name=">>btnNewMap.Name" xml:space="preserve">
+    <value>btnNewMap</value>
   </data>
-  <data name="chkYahooSatellite.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 43</value>
+  <data name=">>btnNewMap.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripSplitButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="chkYahooSatellite.Size" type="System.Drawing.Size, System.Drawing">
-    <value>63, 17</value>
+  <data name=">>btnRemoveMap.Name" xml:space="preserve">
+    <value>btnRemoveMap</value>
   </data>
-  <data name="chkYahooSatellite.TabIndex" type="System.Int32, mscorlib">
-    <value>4</value>
+  <data name=">>btnRemoveMap.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="chkYahooSatellite.Text" xml:space="preserve">
-    <value>Satellite</value>
+  <data name=">>toolStripSeparator1.Name" xml:space="preserve">
+    <value>toolStripSeparator1</value>
   </data>
-  <data name=">>chkYahooSatellite.Name" xml:space="preserve">
-    <value>chkYahooSatellite</value>
+  <data name=">>toolStripSeparator1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name=">>chkYahooSatellite.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name=">>btnMapUp.Name" xml:space="preserve">
+    <value>btnMapUp</value>
   </data>
-  <data name=">>chkYahooSatellite.Parent" xml:space="preserve">
-    <value>groupBox3</value>
+  <data name=">>btnMapUp.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name=">>chkYahooSatellite.ZOrder" xml:space="preserve">
-    <value>1</value>
+  <data name=">>btnMapDown.Name" xml:space="preserve">
+    <value>btnMapDown</value>
   </data>
-  <data name="chkYahooHybrid.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name=">>btnMapDown.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="chkYahooHybrid.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
-  </data>
-  <data name="chkYahooHybrid.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 66</value>
-  </data>
-  <data name="chkYahooHybrid.Size" type="System.Drawing.Size, System.Drawing">
-    <value>56, 17</value>
-  </data>
-  <data name="chkYahooHybrid.TabIndex" type="System.Int32, mscorlib">
-    <value>5</value>
-  </data>
-  <data name="chkYahooHybrid.Text" xml:space="preserve">
-    <value>Hybrid</value>
-  </data>
-  <data name=">>chkYahooHybrid.Name" xml:space="preserve">
-    <value>chkYahooHybrid</value>
-  </data>
-  <data name=">>chkYahooHybrid.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>chkYahooHybrid.Parent" xml:space="preserve">
-    <value>groupBox3</value>
-  </data>
-  <data name=">>chkYahooHybrid.ZOrder" xml:space="preserve">
-    <value>2</value>
-  </data>
-  <data name="groupBox3.Location" type="System.Drawing.Point, System.Drawing">
-    <value>252, 30</value>
-  </data>
-  <data name="groupBox3.Size" type="System.Drawing.Size, System.Drawing">
-    <value>92, 114</value>
-  </data>
-  <data name="groupBox3.TabIndex" type="System.Int32, mscorlib">
-    <value>13</value>
-  </data>
-  <data name="groupBox3.Text" xml:space="preserve">
-    <value>Yahoo! Maps</value>
-  </data>
-  <data name=">>groupBox3.Name" xml:space="preserve">
-    <value>groupBox3</value>
-  </data>
-  <data name=">>groupBox3.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>groupBox3.Parent" xml:space="preserve">
-    <value>grpCms</value>
-  </data>
-  <data name=">>groupBox3.ZOrder" xml:space="preserve">
-    <value>3</value>
-  </data>
-  <data name="txtYahooApiKey.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Left, Right</value>
-  </data>
-  <data name="txtYahooApiKey.Enabled" type="System.Boolean, mscorlib">
-    <value>False</value>
-  </data>
-  <data name="txtYahooApiKey.Location" type="System.Drawing.Point, System.Drawing">
-    <value>23, 182</value>
-  </data>
-  <data name="txtYahooApiKey.Multiline" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="txtYahooApiKey.Size" type="System.Drawing.Size, System.Drawing">
-    <value>442, 36</value>
-  </data>
-  <data name="txtYahooApiKey.TabIndex" type="System.Int32, mscorlib">
-    <value>12</value>
-  </data>
-  <data name=">>txtYahooApiKey.Name" xml:space="preserve">
-    <value>txtYahooApiKey</value>
-  </data>
-  <data name=">>txtYahooApiKey.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>txtYahooApiKey.Parent" xml:space="preserve">
-    <value>grpCms</value>
-  </data>
-  <data name=">>txtYahooApiKey.ZOrder" xml:space="preserve">
-    <value>4</value>
-  </data>
-  <data name="label7.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="label7.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
-  </data>
-  <data name="label7.Location" type="System.Drawing.Point, System.Drawing">
-    <value>20, 166</value>
-  </data>
-  <data name="label7.Size" type="System.Drawing.Size, System.Drawing">
-    <value>243, 13</value>
-  </data>
-  <data name="label7.TabIndex" type="System.Int32, mscorlib">
-    <value>10</value>
-  </data>
-  <data name="label7.Text" xml:space="preserve">
-    <value>Yahoo Maps API Key (Required for Yahoo Layers)</value>
-  </data>
-  <data name=">>label7.Name" xml:space="preserve">
-    <value>label7</value>
-  </data>
-  <data name=">>label7.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>label7.Parent" xml:space="preserve">
-    <value>grpCms</value>
-  </data>
-  <data name=">>label7.ZOrder" xml:space="preserve">
-    <value>5</value>
-  </data>
-  <data name="grpCms.Location" type="System.Drawing.Point, System.Drawing">
-    <value>3, 185</value>
-  </data>
-  <data name="grpCms.Size" type="System.Drawing.Size, System.Drawing">
-    <value>486, 238</value>
-  </data>
-  <data name="grpCms.TabIndex" type="System.Int32, mscorlib">
-    <value>13</value>
-  </data>
-  <data name="grpCms.Text" xml:space="preserve">
-    <value>Commercial Map Service Layers (Check the ones you want available)</value>
-  </data>
-  <data name=">>grpCms.Name" xml:space="preserve">
-    <value>grpCms</value>
-  </data>
-  <data name=">>grpCms.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>grpCms.Parent" xml:space="preserve">
-    <value>$this</value>
-  </data>
-  <data name=">>grpCms.ZOrder" xml:space="preserve">
-    <value>0</value>
-  </data>
-  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
-    <value>492, 426</value>
-  </data>
   <data name=">>$this.Name" xml:space="preserve">
     <value>MapCtrl</value>
   </data>

Added: trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/CommercialMapEditor.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/CommercialMapEditor.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/CommercialMapEditor.Designer.cs	2014-06-18 09:02:42 UTC (rev 8242)
@@ -0,0 +1,122 @@
+namespace Maestro.Editors.Fusion.MapEditors
+{
+    partial class CommercialMapEditor
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.label1 = new System.Windows.Forms.Label();
+            this.txtName = new System.Windows.Forms.TextBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.txtType = new System.Windows.Forms.TextBox();
+            this.txtSubType = new System.Windows.Forms.TextBox();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(19, 43);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(35, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Name";
+            // 
+            // txtName
+            // 
+            this.txtName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtName.Location = new System.Drawing.Point(85, 40);
+            this.txtName.Name = "txtName";
+            this.txtName.Size = new System.Drawing.Size(312, 20);
+            this.txtName.TabIndex = 1;
+            this.txtName.TextChanged += new System.EventHandler(this.txtName_TextChanged);
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(19, 69);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(53, 13);
+            this.label2.TabIndex = 2;
+            this.label2.Text = "Sub-Type";
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(19, 15);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(31, 13);
+            this.label3.TabIndex = 4;
+            this.label3.Text = "Type";
+            // 
+            // txtType
+            // 
+            this.txtType.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtType.Location = new System.Drawing.Point(85, 12);
+            this.txtType.Name = "txtType";
+            this.txtType.ReadOnly = true;
+            this.txtType.Size = new System.Drawing.Size(176, 20);
+            this.txtType.TabIndex = 5;
+            // 
+            // txtSubType
+            // 
+            this.txtSubType.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtSubType.Location = new System.Drawing.Point(85, 66);
+            this.txtSubType.Name = "txtSubType";
+            this.txtSubType.ReadOnly = true;
+            this.txtSubType.Size = new System.Drawing.Size(312, 20);
+            this.txtSubType.TabIndex = 6;
+            // 
+            // CommercialMapEditor
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.txtSubType);
+            this.Controls.Add(this.txtType);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.txtName);
+            this.Controls.Add(this.label1);
+            this.Name = "CommercialMapEditor";
+            this.Size = new System.Drawing.Size(417, 102);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox txtName;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.TextBox txtType;
+        private System.Windows.Forms.TextBox txtSubType;
+    }
+}

Added: trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/CommercialMapEditor.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/CommercialMapEditor.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/CommercialMapEditor.cs	2014-06-18 09:02:42 UTC (rev 8242)
@@ -0,0 +1,68 @@
+#region Disclaimer / License
+// Copyright (C) 2014, 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.Linq;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.ObjectModels.ApplicationDefinition;
+using System.Diagnostics;
+
+namespace Maestro.Editors.Fusion.MapEditors
+{
+    internal partial class CommercialMapEditor : UserControl
+    {
+        private IEditorService _edSvc;
+        private IMap _map;
+        private bool _init;
+
+        public CommercialMapEditor(IEditorService edSvc, IMap map, string [] types)
+        {
+            InitializeComponent();
+            _edSvc = edSvc;
+            _map = map;
+            try
+            {
+                _init = true;
+                txtType.Text = map.Type;
+                var opts = map.CmsMapOptions;
+                Debug.Assert(opts != null);
+                txtName.Text = opts.Name;
+                txtSubType.Text = opts.Type;
+            }
+            finally
+            {
+                _init = false;
+            }
+        }
+
+        private void txtName_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            _map.CmsMapOptions.Name = txtName.Text;
+            _edSvc.HasChanged();
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/CommercialMapEditor.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/CommercialMapEditor.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/CommercialMapEditor.resx	2014-06-18 09:02:42 UTC (rev 8242)
@@ -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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/EditorFactory.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/EditorFactory.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/EditorFactory.cs	2014-06-18 09:02:42 UTC (rev 8242)
@@ -0,0 +1,177 @@
+#region Disclaimer / License
+// Copyright (C) 2014, 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 OSGeo.MapGuide.ObjectModels.ApplicationDefinition;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Maestro.Editors.Fusion.MapEditors
+{
+    class EditorFactory
+    {
+        const string G_NORMAL_MAP = "G_NORMAL_MAP"; //NOXLATE
+        const string G_SATELLITE_MAP = "G_SATELLITE_MAP"; //NOXLATE
+        const string G_HYBRID_MAP = "G_HYBRID_MAP"; //NOXLATE
+        const string G_PHYSICAL_MAP = "G_PHYSICAL_MAP"; //NOXLATE
+
+        const string BING_ROAD = "Road"; //NOXLATE
+        const string BING_AERIAL = "Aerial"; //NOXLATE
+        const string BING_HYBRID = "Hybrid"; //NOXLATE
+
+        const string Type_Google = "Google"; //NOXLATE
+        const string Type_Bing = "VirtualEarth"; //NOXLATE
+        const string Type_OSM = "OpenStreetMap"; //NOXLATE
+        const string Type_MapGuide = "MapGuide"; //NOXLATE
+        const string Type_Generic = "Generic"; //NOXLATE
+
+        const string OSM_MAP_MAPNIK = "Mapnik"; //NOXLATE
+        const string OSM_MAP_TRANSPORTMAP = "TransportMap"; //NOXLATE
+        const string OSM_MAP_CYCLEMAP = "CycleMap"; //NOXLATE
+
+        const string OSM_URL = "http://www.openstreetmap.org/openlayers/OpenStreetMap.js"; //NOXLATE
+        const string GOOGLE_URL = "http://maps.google.com/maps/api/js?sensor=false"; //NOXLATE
+        const string BING_URL = "http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2"; //NOXLATE
+
+        internal static Control GetEditor(IEditorService edSvc, IMapGroup group, IMap map)
+        {
+            switch (map.Type)
+            {
+                case Type_Google:
+                    return new CommercialMapEditor(edSvc, map, new string[] { G_NORMAL_MAP, G_SATELLITE_MAP, G_HYBRID_MAP, G_PHYSICAL_MAP });
+                case Type_Bing:
+                    return new CommercialMapEditor(edSvc, map, new string[] { BING_ROAD, BING_AERIAL, BING_HYBRID });
+                case Type_OSM:
+                    return new CommercialMapEditor(edSvc, map, new string[] { OSM_MAP_MAPNIK, OSM_MAP_CYCLEMAP, OSM_MAP_TRANSPORTMAP });
+                case Type_MapGuide:
+                    return new MapGuideEditor(edSvc, group, map);
+                default:
+                    return new GenericEditor(edSvc, map);
+            }
+        }
+
+        internal static IEnumerable<EditorInvoker> GetAvailableOptions(IMapGroup group)
+        {
+            yield return new EditorInvoker()
+            {
+                Name = "MapGuide", //NOXLATE
+                Action = () =>
+                {
+                    return group.CreateMapGuideEntry("");
+                }
+            };
+            yield return new EditorInvoker()
+            {
+                Name = Strings.CmsGeneric,
+                Action = () =>
+                {
+                    return group.CreateGenericEntry();
+                }
+            };
+            yield return new EditorInvoker() 
+            {
+                Name = Strings.CmsGoogleStreets, 
+                Action = () => {
+                    return group.CreateCmsMapEntry(Type_Google, false, Strings.CmsGoogleStreets, G_NORMAL_MAP);
+                }
+            };
+            yield return new EditorInvoker()
+            {
+                Name = Strings.CmsGoogleSatellite,
+                Action = () =>
+                {
+                    return group.CreateCmsMapEntry(Type_Google, false, Strings.CmsGoogleSatellite, G_SATELLITE_MAP);
+                }
+            };
+            yield return new EditorInvoker()
+            {
+                Name = Strings.CmsGoogleHybrid,
+                Action = () =>
+                {
+                    return group.CreateCmsMapEntry(Type_Google, false, Strings.CmsGoogleHybrid, G_HYBRID_MAP);
+                }
+            };
+            yield return new EditorInvoker()
+            {
+                Name = Strings.CmsGooglePhysical,
+                Action = () =>
+                {
+                    return group.CreateCmsMapEntry(Type_Google, false, Strings.CmsGooglePhysical, G_PHYSICAL_MAP);
+                }
+            };
+            yield return new EditorInvoker()
+            {
+                Name = Strings.CmsBingStreet,
+                Action = () =>
+                {
+                    return group.CreateCmsMapEntry(Type_Bing, false, Strings.CmsBingStreet, BING_ROAD);
+                }
+            };
+            yield return new EditorInvoker()
+            {
+                Name = Strings.CmsBingSatellite,
+                Action = () =>
+                {
+                    return group.CreateCmsMapEntry(Type_Bing, false, Strings.CmsBingSatellite, BING_AERIAL);
+                }
+            };
+            yield return new EditorInvoker()
+            {
+                Name = Strings.CmsBingHybrid,
+                Action = () =>
+                {
+                    return group.CreateCmsMapEntry(Type_Bing, false, Strings.CmsBingHybrid, BING_HYBRID);
+                }
+            };
+            yield return new EditorInvoker()
+            {
+                Name = Strings.CmsOsm,
+                Action = () =>
+                {
+                    return group.CreateCmsMapEntry(Type_OSM, false, Strings.CmsOsm, OSM_MAP_MAPNIK);
+                }
+            };
+            yield return new EditorInvoker()
+            {
+                Name = Strings.CmsOsmCycle,
+                Action = () =>
+                {
+                    return group.CreateCmsMapEntry(Type_OSM, false, Strings.CmsOsmCycle, OSM_MAP_CYCLEMAP);
+                }
+            };
+            yield return new EditorInvoker()
+            {
+                Name = Strings.CmsOsmTransport,
+                Action = () =>
+                {
+                    return group.CreateCmsMapEntry(Type_OSM, false, Strings.CmsOsmTransport, OSM_MAP_TRANSPORTMAP);
+                }
+            };
+        }
+    }
+
+    class EditorInvoker
+    {
+        public string Name;
+
+        public Func<IMap> Action;
+    }
+}

Added: trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/GenericEditor.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/GenericEditor.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/GenericEditor.Designer.cs	2014-06-18 09:02:42 UTC (rev 8242)
@@ -0,0 +1,88 @@
+namespace Maestro.Editors.Fusion.MapEditors
+{
+    partial class GenericEditor
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.btnSave = new System.Windows.Forms.ToolStripButton();
+            this.txtXml = new ICSharpCode.TextEditor.TextEditorControl();
+            this.toolStrip1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnSave});
+            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Size = new System.Drawing.Size(605, 25);
+            this.toolStrip1.TabIndex = 0;
+            this.toolStrip1.Text = "toolStrip1";
+            // 
+            // btnSave
+            // 
+            this.btnSave.Image = global::Maestro.Editors.Properties.Resources.disk;
+            this.btnSave.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnSave.Name = "btnSave";
+            this.btnSave.Size = new System.Drawing.Size(51, 22);
+            this.btnSave.Text = "Save";
+            this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
+            // 
+            // txtXml
+            // 
+            this.txtXml.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.txtXml.IsReadOnly = false;
+            this.txtXml.Location = new System.Drawing.Point(0, 25);
+            this.txtXml.Name = "txtXml";
+            this.txtXml.Size = new System.Drawing.Size(605, 234);
+            this.txtXml.TabIndex = 1;
+            this.txtXml.TextChanged += new System.EventHandler(this.txtXml_TextChanged);
+            // 
+            // GenericEditor
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.txtXml);
+            this.Controls.Add(this.toolStrip1);
+            this.Name = "GenericEditor";
+            this.Size = new System.Drawing.Size(605, 259);
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.ToolStripButton btnSave;
+        private ICSharpCode.TextEditor.TextEditorControl txtXml;
+
+    }
+}

Added: trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/GenericEditor.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/GenericEditor.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/GenericEditor.cs	2014-06-18 09:02:42 UTC (rev 8242)
@@ -0,0 +1,59 @@
+#region Disclaimer / License
+// Copyright (C) 2014, 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.Linq;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.ObjectModels.ApplicationDefinition;
+
+namespace Maestro.Editors.Fusion.MapEditors
+{
+    internal partial class GenericEditor : UserControl
+    {
+        private IEditorService _edSvc;
+        private IMap _map;
+
+        public GenericEditor(IEditorService edSvc, IMap map)
+        {
+            InitializeComponent();
+            txtXml.SetHighlighting("XML"); //NOXLATE
+            _edSvc = edSvc;
+            _map = map;
+            txtXml.Text = map.AsXml();
+        }
+
+        private void btnSave_Click(object sender, EventArgs e)
+        {
+            btnSave.Checked = false;
+            _map.FromXml(txtXml.Text);
+            MessageBox.Show(Strings.OptionsSyncedToDocument);
+            _edSvc.HasChanged();
+        }
+
+        private void txtXml_TextChanged(object sender, EventArgs e)
+        {
+            btnSave.Checked = true;
+        }
+    }
+}

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

Added: trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/MapGuideEditor.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/MapGuideEditor.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/MapGuideEditor.Designer.cs	2014-06-18 09:02:42 UTC (rev 8242)
@@ -0,0 +1,247 @@
+namespace Maestro.Editors.Fusion.MapEditors
+{
+    partial class MapGuideEditor
+    {
+        /// <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.chkSelectionAsOverlay = new System.Windows.Forms.CheckBox();
+            this.cmbSelectionColor = new Maestro.Editors.Common.ColorComboBox();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.chkOverride = new System.Windows.Forms.CheckBox();
+            this.txtViewScale = new System.Windows.Forms.TextBox();
+            this.txtViewY = new System.Windows.Forms.TextBox();
+            this.txtViewX = new System.Windows.Forms.TextBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.lblSelColor = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.chkSingleTiled = new System.Windows.Forms.CheckBox();
+            this.txtMapDefinition = new System.Windows.Forms.TextBox();
+            this.btnBrowseMdf = new System.Windows.Forms.Button();
+            this.groupBox1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // chkSelectionAsOverlay
+            // 
+            this.chkSelectionAsOverlay.AutoSize = true;
+            this.chkSelectionAsOverlay.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.chkSelectionAsOverlay.Location = new System.Drawing.Point(311, 107);
+            this.chkSelectionAsOverlay.Name = "chkSelectionAsOverlay";
+            this.chkSelectionAsOverlay.Size = new System.Drawing.Size(124, 17);
+            this.chkSelectionAsOverlay.TabIndex = 19;
+            this.chkSelectionAsOverlay.Text = "Selection As Overlay";
+            this.chkSelectionAsOverlay.UseVisualStyleBackColor = true;
+            this.chkSelectionAsOverlay.CheckedChanged += new System.EventHandler(this.chkSelectionAsOverlay_CheckedChanged);
+            // 
+            // cmbSelectionColor
+            // 
+            this.cmbSelectionColor.FormattingEnabled = true;
+            this.cmbSelectionColor.Location = new System.Drawing.Point(103, 105);
+            this.cmbSelectionColor.Name = "cmbSelectionColor";
+            this.cmbSelectionColor.Size = new System.Drawing.Size(121, 21);
+            this.cmbSelectionColor.TabIndex = 18;
+            this.cmbSelectionColor.SelectedIndexChanged += new System.EventHandler(this.cmbSelectionColor_SelectedIndexChanged);
+            // 
+            // groupBox1
+            // 
+            this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.groupBox1.Controls.Add(this.chkOverride);
+            this.groupBox1.Controls.Add(this.txtViewScale);
+            this.groupBox1.Controls.Add(this.txtViewY);
+            this.groupBox1.Controls.Add(this.txtViewX);
+            this.groupBox1.Controls.Add(this.label4);
+            this.groupBox1.Controls.Add(this.label3);
+            this.groupBox1.Controls.Add(this.label2);
+            this.groupBox1.Location = new System.Drawing.Point(13, 43);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(430, 56);
+            this.groupBox1.TabIndex = 12;
+            this.groupBox1.TabStop = false;
+            // 
+            // chkOverride
+            // 
+            this.chkOverride.AutoSize = true;
+            this.chkOverride.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.chkOverride.Location = new System.Drawing.Point(6, 0);
+            this.chkOverride.Name = "chkOverride";
+            this.chkOverride.Size = new System.Drawing.Size(119, 17);
+            this.chkOverride.TabIndex = 6;
+            this.chkOverride.Text = "Override Initial View";
+            this.chkOverride.UseVisualStyleBackColor = true;
+            this.chkOverride.CheckedChanged += new System.EventHandler(this.chkOverride_CheckedChanged);
+            // 
+            // txtViewScale
+            // 
+            this.txtViewScale.Location = new System.Drawing.Point(321, 23);
+            this.txtViewScale.Name = "txtViewScale";
+            this.txtViewScale.Size = new System.Drawing.Size(92, 20);
+            this.txtViewScale.TabIndex = 5;
+            this.txtViewScale.TextChanged += new System.EventHandler(this.txtViewScale_TextChanged);
+            // 
+            // txtViewY
+            // 
+            this.txtViewY.Location = new System.Drawing.Point(180, 23);
+            this.txtViewY.Name = "txtViewY";
+            this.txtViewY.Size = new System.Drawing.Size(80, 20);
+            this.txtViewY.TabIndex = 4;
+            this.txtViewY.TextChanged += new System.EventHandler(this.txtViewY_TextChanged);
+            // 
+            // txtViewX
+            // 
+            this.txtViewX.Location = new System.Drawing.Point(54, 23);
+            this.txtViewX.Name = "txtViewX";
+            this.txtViewX.Size = new System.Drawing.Size(80, 20);
+            this.txtViewX.TabIndex = 3;
+            this.txtViewX.TextChanged += new System.EventHandler(this.txtViewX_TextChanged);
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label4.Location = new System.Drawing.Point(272, 26);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(34, 13);
+            this.label4.TabIndex = 2;
+            this.label4.Text = "Scale";
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label3.Location = new System.Drawing.Point(148, 26);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(14, 13);
+            this.label3.TabIndex = 1;
+            this.label3.Text = "Y";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label2.Location = new System.Drawing.Point(21, 26);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(14, 13);
+            this.label2.TabIndex = 0;
+            this.label2.Text = "X";
+            // 
+            // lblSelColor
+            // 
+            this.lblSelColor.AutoSize = true;
+            this.lblSelColor.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.lblSelColor.Location = new System.Drawing.Point(13, 108);
+            this.lblSelColor.Name = "lblSelColor";
+            this.lblSelColor.Size = new System.Drawing.Size(78, 13);
+            this.lblSelColor.TabIndex = 17;
+            this.lblSelColor.Text = "Selection Color";
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label5.Location = new System.Drawing.Point(10, 19);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(75, 13);
+            this.label5.TabIndex = 13;
+            this.label5.Text = "Map Definition";
+            // 
+            // chkSingleTiled
+            // 
+            this.chkSingleTiled.AutoSize = true;
+            this.chkSingleTiled.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.chkSingleTiled.Location = new System.Drawing.Point(230, 107);
+            this.chkSingleTiled.Name = "chkSingleTiled";
+            this.chkSingleTiled.Size = new System.Drawing.Size(75, 17);
+            this.chkSingleTiled.TabIndex = 16;
+            this.chkSingleTiled.Text = "Single Tile";
+            this.chkSingleTiled.UseVisualStyleBackColor = true;
+            this.chkSingleTiled.CheckedChanged += new System.EventHandler(this.chkSingleTiled_CheckedChanged);
+            // 
+            // txtMapDefinition
+            // 
+            this.txtMapDefinition.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtMapDefinition.Location = new System.Drawing.Point(103, 16);
+            this.txtMapDefinition.Name = "txtMapDefinition";
+            this.txtMapDefinition.ReadOnly = true;
+            this.txtMapDefinition.Size = new System.Drawing.Size(305, 20);
+            this.txtMapDefinition.TabIndex = 14;
+            this.txtMapDefinition.TextChanged += new System.EventHandler(this.txtMapDefinition_TextChanged);
+            // 
+            // btnBrowseMdf
+            // 
+            this.btnBrowseMdf.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnBrowseMdf.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.btnBrowseMdf.Location = new System.Drawing.Point(414, 14);
+            this.btnBrowseMdf.Name = "btnBrowseMdf";
+            this.btnBrowseMdf.Size = new System.Drawing.Size(29, 23);
+            this.btnBrowseMdf.TabIndex = 15;
+            this.btnBrowseMdf.Text = "...";
+            this.btnBrowseMdf.UseVisualStyleBackColor = true;
+            this.btnBrowseMdf.Click += new System.EventHandler(this.btnBrowseMdf_Click);
+            // 
+            // MapGuideEditor
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.chkSelectionAsOverlay);
+            this.Controls.Add(this.cmbSelectionColor);
+            this.Controls.Add(this.groupBox1);
+            this.Controls.Add(this.lblSelColor);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.chkSingleTiled);
+            this.Controls.Add(this.txtMapDefinition);
+            this.Controls.Add(this.btnBrowseMdf);
+            this.Name = "MapGuideEditor";
+            this.Size = new System.Drawing.Size(460, 142);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.CheckBox chkSelectionAsOverlay;
+        private Common.ColorComboBox cmbSelectionColor;
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.CheckBox chkOverride;
+        private System.Windows.Forms.TextBox txtViewScale;
+        private System.Windows.Forms.TextBox txtViewY;
+        private System.Windows.Forms.TextBox txtViewX;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label lblSelColor;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.CheckBox chkSingleTiled;
+        private System.Windows.Forms.TextBox txtMapDefinition;
+        private System.Windows.Forms.Button btnBrowseMdf;
+    }
+}

Added: trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/MapGuideEditor.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/MapGuideEditor.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/MapGuideEditor.cs	2014-06-18 09:02:42 UTC (rev 8242)
@@ -0,0 +1,183 @@
+#region Disclaimer / License
+// Copyright (C) 2014, 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.Linq;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.ObjectModels.ApplicationDefinition;
+using System.Globalization;
+using OSGeo.MapGuide.MaestroAPI;
+using Maestro.Editors.Generic;
+
+namespace Maestro.Editors.Fusion.MapEditors
+{
+    internal partial class MapGuideEditor : UserControl
+    {
+        private IMap _map;
+        private IEditorService _edSvc;
+        private IMapView _initialView;
+        private IMapGroup _group;
+        private bool _init;
+
+        public MapGuideEditor(IEditorService edSvc, IMapGroup group, IMap map)
+        {
+            InitializeComponent();
+            _edSvc = edSvc;
+            _map = map;
+            _group = group;
+            try
+            {
+                _init = true;
+                cmbSelectionColor.ResetColors();
+                txtMapDefinition.Text = _map.GetMapDefinition();
+
+                _initialView = group.InitialView;
+                chkSingleTiled.Checked = _map.SingleTile;
+                chkOverride.Checked = (_initialView != null);
+                if (_initialView == null)
+                    _initialView = group.CreateInitialView(0.0, 0.0, 0.0);
+
+                txtViewX.Text = _initialView.CenterX.ToString(CultureInfo.InvariantCulture);
+                txtViewY.Text = _initialView.CenterY.ToString(CultureInfo.InvariantCulture);
+                txtViewScale.Text = _initialView.Scale.ToString(CultureInfo.InvariantCulture);
+
+                var selOverlay = _map.GetValue("SelectionAsOverlay"); //NOXLATE
+                var selColor = _map.GetValue("SelectionColor"); //NOXLATE
+
+                if (!string.IsNullOrEmpty(selColor))
+                    cmbSelectionColor.CurrentColor = Utility.ParseHTMLColorRGBA(selColor.Substring(2)); //Strip the "0x" part
+
+                if (!string.IsNullOrEmpty(selOverlay))
+                {
+                    bool b = true;
+                    if (bool.TryParse(selOverlay, out b))
+                        chkSelectionAsOverlay.Checked = b;
+                }
+            }
+            finally
+            {
+                _init = false;
+            }
+        }
+
+        private void txtViewX_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            double d;
+            if (double.TryParse(txtViewX.Text, out d))
+            {
+                _initialView.CenterX = d;
+                _edSvc.HasChanged();
+            }
+        }
+
+        private void txtViewY_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            double d;
+            if (double.TryParse(txtViewY.Text, out d))
+            {
+                _initialView.CenterY = d;
+                _edSvc.HasChanged();
+            }
+        }
+
+        private void txtViewScale_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            double d;
+            if (double.TryParse(txtViewScale.Text, out d))
+            {
+                _initialView.Scale = d;
+                _edSvc.HasChanged();
+            }
+        }
+
+        private void txtMapDefinition_TextChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            _map.SetMapDefinition(txtMapDefinition.Text);
+            _edSvc.HasChanged();
+        }
+
+        private void chkSingleTiled_CheckedChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            _map.SingleTile = chkSingleTiled.Checked;
+            _edSvc.HasChanged();
+        }
+
+        private void cmbSelectionColor_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            _map.SetValue("SelectionColor", "0x" + Utility.SerializeHTMLColorRGBA(cmbSelectionColor.CurrentColor, true)); //NOXLATE
+            _edSvc.HasChanged();
+        }
+
+        private void chkSelectionAsOverlay_CheckedChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            _map.SetValue("SelectionAsOverlay", chkSelectionAsOverlay.Checked.ToString().ToLower()); //NOXLATE
+            _edSvc.HasChanged();
+        }
+
+        private void chkOverride_CheckedChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            if (chkOverride.Checked)
+                _group.InitialView = _initialView;
+            else
+                _group.InitialView = null;
+
+            _edSvc.HasChanged();
+        }
+
+        private void btnBrowseMdf_Click(object sender, EventArgs e)
+        {
+            using (var picker = new ResourcePicker(_edSvc.CurrentConnection, ResourceTypes.MapDefinition.ToString(), ResourcePickerMode.OpenResource))
+            {
+                if (picker.ShowDialog() == DialogResult.OK)
+                {
+                    txtMapDefinition.Text = picker.ResourceID;
+                }
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/MapGuideEditor.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/MapGuideEditor.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Editors/Fusion/MapEditors/MapGuideEditor.resx	2014-06-18 09:02:42 UTC (rev 8242)
@@ -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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file

Modified: trunk/Tools/Maestro/Maestro.Editors/Maestro.Editors.csproj
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Maestro.Editors.csproj	2014-06-18 08:37:30 UTC (rev 8241)
+++ trunk/Tools/Maestro/Maestro.Editors/Maestro.Editors.csproj	2014-06-18 09:02:42 UTC (rev 8242)
@@ -519,6 +519,25 @@
     <Compile Include="Fusion\MapCtrl.Designer.cs">
       <DependentUpon>MapCtrl.cs</DependentUpon>
     </Compile>
+    <Compile Include="Fusion\MapEditors\CommercialMapEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Fusion\MapEditors\CommercialMapEditor.Designer.cs">
+      <DependentUpon>CommercialMapEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Fusion\MapEditors\EditorFactory.cs" />
+    <Compile Include="Fusion\MapEditors\GenericEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Fusion\MapEditors\GenericEditor.Designer.cs">
+      <DependentUpon>GenericEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Fusion\MapEditors\MapGuideEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Fusion\MapEditors\MapGuideEditor.Designer.cs">
+      <DependentUpon>MapGuideEditor.cs</DependentUpon>
+    </Compile>
     <Compile Include="Fusion\MapSettingsCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -1543,6 +1562,15 @@
     <EmbeddedResource Include="Fusion\MapCtrl.resx">
       <DependentUpon>MapCtrl.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="Fusion\MapEditors\CommercialMapEditor.resx">
+      <DependentUpon>CommercialMapEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Fusion\MapEditors\GenericEditor.resx">
+      <DependentUpon>GenericEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Fusion\MapEditors\MapGuideEditor.resx">
+      <DependentUpon>MapGuideEditor.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="Fusion\MapSettingsCtrl.resx">
       <DependentUpon>MapSettingsCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>

Modified: trunk/Tools/Maestro/Maestro.Editors/Strings.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Strings.Designer.cs	2014-06-18 08:37:30 UTC (rev 8241)
+++ trunk/Tools/Maestro/Maestro.Editors/Strings.Designer.cs	2014-06-18 09:02:42 UTC (rev 8242)
@@ -178,6 +178,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Generic Layer.
+        /// </summary>
+        internal static string CmsGeneric {
+            get {
+                return ResourceManager.GetString("CmsGeneric", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Google Hybrid.
         /// </summary>
         internal static string CmsGoogleHybrid {
@@ -1960,6 +1969,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Options synced back to document.
+        /// </summary>
+        internal static string OptionsSyncedToDocument {
+            get {
+                return ResourceManager.GetString("OptionsSyncedToDocument", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to You must enter a full path to the output file.
         /// </summary>
         internal static string OutputFileMissing {

Modified: trunk/Tools/Maestro/Maestro.Editors/Strings.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Strings.resx	2014-06-18 08:37:30 UTC (rev 8241)
+++ trunk/Tools/Maestro/Maestro.Editors/Strings.resx	2014-06-18 09:02:42 UTC (rev 8242)
@@ -1617,4 +1617,10 @@
   <data name="PropertyInfo" xml:space="preserve">
     <value>Name: {1}{0}Identifier: {2}{0}Description: {3}{0}Type: {4}{0}Default Value: {5}</value>
   </data>
+  <data name="CmsGeneric" xml:space="preserve">
+    <value>Generic Layer</value>
+  </data>
+  <data name="OptionsSyncedToDocument" xml:space="preserve">
+    <value>Options synced back to document</value>
+  </data>
 </root>
\ No newline at end of file

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/ApplicationDefinition.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/ApplicationDefinition.cs	2014-06-18 08:37:30 UTC (rev 8241)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/ApplicationDefinition.cs	2014-06-18 09:02:42 UTC (rev 8242)
@@ -697,6 +697,45 @@
 
     partial class MapGroupType : IMapGroup
     {
+        IMap IMapGroup.CreateMapGuideEntry(string mapDefinition)
+        {
+            var map = new MapType()
+            {
+                Type = "MapGuide", //NOXLATE
+                SingleTile = "true",
+                Extension = new CustomContentType()
+                {
+                    Any = new XmlElement[1]
+                }
+            };
+            map.Extension.Any[0] = AppDefDocument.Instance.CreateElement("ResourceId"); //NOXLATE
+            map.Extension.Any[0].InnerText = mapDefinition;
+            return map;
+        }
+
+        IMap IMapGroup.CreateGenericEntry()
+        {
+            var el = AppDefDocument.Instance.CreateElement("Options"); //NOXLATE
+            var n = AppDefDocument.Instance.CreateElement("name"); //NOXLATE
+            var t = AppDefDocument.Instance.CreateElement("type"); //NOXLATE
+
+            n.InnerText = string.Empty;
+            t.InnerText = string.Empty;
+            el.AppendChild(n);
+            el.AppendChild(t);
+
+            var map = new MapType()
+            {
+                Type = "", //NOXLATE
+                SingleTile = "false", //NOXLATE
+                Extension = new CustomContentType()
+                {
+                    Any = new XmlElement[] { el }
+                }
+            };
+            return map;
+        }
+
         IMap IMapGroup.CreateCmsMapEntry(string type, bool singleTile, string name, string olType)
         {
             var el = AppDefDocument.Instance.CreateElement("Options"); //NOXLATE
@@ -817,6 +856,19 @@
 
     partial class MapType : IMap
     {
+        string IMap.AsXml()
+        {
+            return this.Serialize();
+        }
+
+        void IMap.FromXml(string xml)
+        {
+            var mt = MapType.Deserialize(xml);
+            this.Extension = mt.Extension;
+            this.SingleTile = mt.SingleTile;
+            this.Type = mt.Type;
+        }
+
         [XmlIgnore]
         IExtension IExtensibleElement.Extension
         {
@@ -843,13 +895,13 @@
             }
         }
 
-        public ICmsMapOptions CreateOptions(string name, string type)
+        ICmsMapOptions IMap.CreateOptions(string name, string type)
         {
             return new MapOptions() { Name = name, Type = type };
         }
 
         [XmlIgnore]
-        public ICmsMapOptions CmsMapOptions
+        ICmsMapOptions IMap.CmsMapOptions
         {
             get
             {
@@ -945,7 +997,7 @@
         }
 
         [XmlIgnore]
-        public IMapGuideOverlayOptions OverlayOptions
+        IMapGuideOverlayOptions IMap.OverlayOptions
         {
             /*
             From Fusion Wiki:
@@ -977,7 +1029,7 @@
                                 var p = els[i]["projection"]; //NOXLATE
 
                                 if (n != null && t != null)
-                                    return CreateOverlayOptions(Convert.ToBoolean(n.InnerText), Convert.ToBoolean(t.InnerText), p.InnerText);
+                                    return ((IMap)this).CreateOverlayOptions(Convert.ToBoolean(n.InnerText), Convert.ToBoolean(t.InnerText), p.InnerText);
                             }
                             catch
                             {
@@ -1059,7 +1111,7 @@
             }
         }
 
-        public IMapGuideOverlayOptions CreateOverlayOptions(bool isBaseLayer, bool useOverlay, string projection)
+        IMapGuideOverlayOptions IMap.CreateOverlayOptions(bool isBaseLayer, bool useOverlay, string projection)
         {
             return new MapGuideOverlayOptions() { IsBaseLayer = isBaseLayer, UseOverlay = useOverlay, Projection = projection };
         }

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/ApplicationDefinitionInterfaces.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/ApplicationDefinitionInterfaces.cs	2014-06-18 08:37:30 UTC (rev 8241)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/ApplicationDefinitionInterfaces.cs	2014-06-18 09:02:42 UTC (rev 8242)
@@ -490,7 +490,7 @@
         IFlyoutItem CreateFlyout(string label);
 
         /// <summary>
-        /// Adds the new map group to the current map set
+        /// Adds the new map group to the current map set with a default MapGuide child map
         /// </summary>
         /// <param name="id"></param>
         /// <param name="singleTile"></param>
@@ -499,7 +499,7 @@
         IMapGroup AddMapGroup(string id, bool singleTile, string mapDefinitionId);
 
         /// <summary>
-        /// Adds a new map group to the specified map set
+        /// Adds a new map group to the specified map set with a default MapGuide child map
         /// </summary>
         /// <param name="id"></param>
         /// <param name="singleTile"></param>
@@ -1118,7 +1118,11 @@
 
         IMapView CreateInitialView(double x, double y, double scale);
 
+        IMap CreateMapGuideEntry(string mapDefinition);
+
         IMap CreateCmsMapEntry(string type, bool singleTile, string name, string olType);
+
+        IMap CreateGenericEntry();
     }
 
     public interface IMap : INotifyPropertyChanged, IExtensibleElement
@@ -1134,6 +1138,10 @@
         ICmsMapOptions CmsMapOptions { get; set; }
 
         ICmsMapOptions CreateOptions(string name, string type);
+
+        string AsXml();
+
+        void FromXml(string xml);
     }
 
     public interface IMapGuideOverlayOptions



More information about the mapguide-commits mailing list