[mapguide-commits] r6729 - in trunk/Tools/Maestro: Maestro.TestViewer OSGeo.MapGuide.MaestroAPI/Mapping

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Mon Jun 4 06:58:26 PDT 2012


Author: jng
Date: 2012-06-04 06:58:23 -0700 (Mon, 04 Jun 2012)
New Revision: 6729

Modified:
   trunk/Tools/Maestro/Maestro.TestViewer/MainForm.Designer.cs
   trunk/Tools/Maestro/Maestro.TestViewer/MainForm.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Mapping/RuntimeMap.cs
Log:
Add a new ToMapDefinition() API to the RuntimeMap class. This allows a RuntimeMap instance to be converted back to a MapDefinition

Modified: trunk/Tools/Maestro/Maestro.TestViewer/MainForm.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.TestViewer/MainForm.Designer.cs	2012-06-04 13:15:24 UTC (rev 6728)
+++ trunk/Tools/Maestro/Maestro.TestViewer/MainForm.Designer.cs	2012-06-04 13:58:23 UTC (rev 6729)
@@ -37,6 +37,7 @@
             this.lblSelected = new System.Windows.Forms.ToolStripStatusLabel();
             this.lblScale = new System.Windows.Forms.ToolStripStatusLabel();
             this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+            this.saveBackToMapDefinitionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.legend1 = new Maestro.MapViewer.Legend();
             this.mapViewer1 = new Maestro.MapViewer.MapViewer();
             this.defaultToolbar1 = new Maestro.MapViewer.DefaultToolbar();
@@ -63,6 +64,7 @@
             // 
             this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.openMapDefinitionToolStripMenuItem,
+            this.saveBackToMapDefinitionToolStripMenuItem,
             this.quitToolStripMenuItem});
             this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
             this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
@@ -71,14 +73,14 @@
             // openMapDefinitionToolStripMenuItem
             // 
             this.openMapDefinitionToolStripMenuItem.Name = "openMapDefinitionToolStripMenuItem";
-            this.openMapDefinitionToolStripMenuItem.Size = new System.Drawing.Size(185, 22);
+            this.openMapDefinitionToolStripMenuItem.Size = new System.Drawing.Size(222, 22);
             this.openMapDefinitionToolStripMenuItem.Text = "Open Map Definition";
             this.openMapDefinitionToolStripMenuItem.Click += new System.EventHandler(this.openMapDefinitionToolStripMenuItem_Click);
             // 
             // quitToolStripMenuItem
             // 
             this.quitToolStripMenuItem.Name = "quitToolStripMenuItem";
-            this.quitToolStripMenuItem.Size = new System.Drawing.Size(185, 22);
+            this.quitToolStripMenuItem.Size = new System.Drawing.Size(222, 22);
             this.quitToolStripMenuItem.Text = "Quit";
             this.quitToolStripMenuItem.Click += new System.EventHandler(this.quitToolStripMenuItem_Click);
             // 
@@ -129,6 +131,14 @@
             this.splitContainer1.SplitterDistance = 217;
             this.splitContainer1.TabIndex = 3;
             // 
+            // saveBackToMapDefinitionToolStripMenuItem
+            // 
+            this.saveBackToMapDefinitionToolStripMenuItem.Enabled = false;
+            this.saveBackToMapDefinitionToolStripMenuItem.Name = "saveBackToMapDefinitionToolStripMenuItem";
+            this.saveBackToMapDefinitionToolStripMenuItem.Size = new System.Drawing.Size(222, 22);
+            this.saveBackToMapDefinitionToolStripMenuItem.Text = "Save back to Map Definition";
+            this.saveBackToMapDefinitionToolStripMenuItem.Click += new System.EventHandler(this.saveBackToMapDefinitionToolStripMenuItem_Click);
+            // 
             // legend1
             // 
             this.legend1.AllowDrop = true;
@@ -149,7 +159,6 @@
             // 
             // mapViewer1
             // 
-            this.mapViewer1.ConvertTiledGroupsToNonTiled = true;
             this.mapViewer1.Cursor = System.Windows.Forms.Cursors.Default;
             this.mapViewer1.Dock = System.Windows.Forms.DockStyle.Fill;
             this.mapViewer1.Location = new System.Drawing.Point(0, 0);
@@ -218,6 +227,7 @@
         private MapViewer.DefaultToolbar defaultToolbar1;
         private MapViewer.MapStatusTracker mapStatusTracker1;
         private MapViewer.Legend legend1;
+        private System.Windows.Forms.ToolStripMenuItem saveBackToMapDefinitionToolStripMenuItem;
     }
 }
 

Modified: trunk/Tools/Maestro/Maestro.TestViewer/MainForm.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.TestViewer/MainForm.cs	2012-06-04 13:15:24 UTC (rev 6728)
+++ trunk/Tools/Maestro/Maestro.TestViewer/MainForm.cs	2012-06-04 13:58:23 UTC (rev 6729)
@@ -91,6 +91,7 @@
 
             var rtMap = mapSvc.CreateMap(mdf);
             mapViewer1.LoadMap(rtMap);
+            saveBackToMapDefinitionToolStripMenuItem.Enabled = true;
         }
 
         private void legend1_DragDrop(object sender, DragEventArgs e)
@@ -113,5 +114,27 @@
             Trace.TraceInformation("Legend: DragOver");
             e.Effect = DragDropEffects.Move;
         }
+
+        private void saveBackToMapDefinitionToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var rtMap = mapViewer1.GetMap();
+            if (rtMap == null)
+            {
+                MessageBox.Show("No map loaded");
+                return;
+            }
+
+            var mdf = rtMap.ToMapDefinition(true);
+            var resSvc = mdf.CurrentConnection.ResourceService;
+            using (var resPicker = new ResourcePicker(resSvc, ResourceTypes.MapDefinition, ResourcePickerMode.SaveResource))
+            {
+                if (resPicker.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+                {
+                    mdf.ResourceID = resPicker.ResourceID;
+                    resSvc.SaveResource(mdf);
+                    MessageBox.Show("Map saved to: " + resPicker.ResourceID);
+                }
+            }
+        }
     }
 }

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Mapping/RuntimeMap.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Mapping/RuntimeMap.cs	2012-06-04 13:15:24 UTC (rev 6728)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Mapping/RuntimeMap.cs	2012-06-04 13:58:23 UTC (rev 6729)
@@ -1565,5 +1565,108 @@
         #endregion
 
         internal bool StrictSelection { get; set; }
+
+        /// <summary>
+        /// Converts this instance to an equivalent Map Definition
+        /// </summary>
+        /// <param name="useOriginalAsTemplate">If true, the converted Map Definition will use core settings from the original Map Definition used to create this instance</param>
+        /// <returns></returns>
+        public IMapDefinition ToMapDefinition(bool useOriginalAsTemplate)
+        {
+            var newMdf = ObjectFactory.CreateMapDefinition(this.CurrentConnection, ResourceIdentifier.GetName(this.MapDefinition));
+            if (useOriginalAsTemplate && this.ResourceService.ResourceExists(this.MapDefinition))
+            {
+                var oldMdf = (IMapDefinition)this.ResourceService.GetResource(this.MapDefinition);
+                newMdf.BackgroundColor = oldMdf.BackgroundColor;
+                newMdf.CoordinateSystem = oldMdf.CoordinateSystem;
+                newMdf.Metadata = oldMdf.Metadata;
+                newMdf.Extents = oldMdf.Extents;
+            }
+
+            var baseGroups = new List<RuntimeMapGroup>();
+
+            //Add dynamic groups
+            for (int i = this.Groups.Count - 1; i >= 0; i--)
+            {
+                //Deal with base groups later
+                if (this.Groups[i].Type == RuntimeMapGroup.kBaseMap)
+                {
+                    baseGroups.Add(this.Groups[i]);
+                    continue;
+                }
+
+                var rtGroup = this.Groups[i];
+                var newGroup = newMdf.AddGroup(rtGroup.Name);
+                newGroup.Group = rtGroup.Group;
+                newGroup.ExpandInLegend = rtGroup.ExpandInLegend;
+                newGroup.LegendLabel = rtGroup.LegendLabel;
+                newGroup.ShowInLegend = rtGroup.ShowInLegend;
+                newGroup.Visible = rtGroup.Visible;
+            }
+
+            var baseLayers = new List<RuntimeMapLayer>();
+
+            //Populate dynamic layers. Loop in reverse order so that they are added in correct draw order
+            for (int i = this.Layers.Count - 1; i >= 0; i--)
+            {
+                //Deal with base layers later
+                if (this.Layers[i].Type == RuntimeMapLayer.kBaseMap)
+                {
+                    baseLayers.Add(this.Layers[i]);
+                    continue;
+                }
+
+                var rtLayer = this.Layers[i];
+                var newLayer = newMdf.AddLayer(rtLayer.Group, rtLayer.Name, rtLayer.LayerDefinitionID);
+                newLayer.ExpandInLegend = rtLayer.ExpandInLegend;
+                newLayer.LegendLabel = rtLayer.LegendLabel;
+                newLayer.Selectable = rtLayer.Selectable;
+                newLayer.ShowInLegend = rtLayer.ShowInLegend;
+                newLayer.Visible = rtLayer.Visible;
+            }
+
+            if (baseLayers.Count > 0 && baseGroups.Count > 0)
+            {
+                newMdf.InitBaseMap();
+
+                //Add finite scales first
+                for (int i = _finiteDisplayScales.Length - 1; i >= 0; i--)
+                {
+                    newMdf.BaseMap.AddFiniteDisplayScale(_finiteDisplayScales[i]);
+                }
+
+                var baseGroupsByName = new Dictionary<string, IBaseMapGroup>();
+
+                //Now groups
+                for (int i = baseGroups.Count - 1; i >= 0; i--)
+                {
+                    var rtGroup = baseGroups[i];
+                    var newGroup = newMdf.BaseMap.AddBaseLayerGroup(rtGroup.Name);
+                    newGroup.ExpandInLegend = rtGroup.ExpandInLegend;
+                    newGroup.LegendLabel = rtGroup.LegendLabel;
+                    newGroup.ShowInLegend = rtGroup.ShowInLegend;
+                    newGroup.Visible = rtGroup.Visible;
+
+                    baseGroupsByName.Add(newGroup.Name, newGroup);
+                }
+
+                //Then layers. Loop in reverse order so that they are added in correct draw order
+                for (int i = baseLayers.Count - 1; i >= 0; i--)
+                {
+                    var rtLayer = baseLayers[i];
+                    //Should always happen
+                    if (baseGroupsByName.ContainsKey(rtLayer.Group))
+                    {
+                        var newLayer = baseGroupsByName[rtLayer.Group].AddLayer(rtLayer.Name, rtLayer.LayerDefinitionID);
+                        newLayer.ExpandInLegend = rtLayer.ExpandInLegend;
+                        newLayer.LegendLabel = rtLayer.LegendLabel;
+                        newLayer.Selectable = rtLayer.Selectable;
+                        newLayer.ShowInLegend = rtLayer.ShowInLegend;
+                    }
+                }
+            }
+
+            return newMdf;
+        }
     }
 }



More information about the mapguide-commits mailing list