[mapguide-commits] r6419 - in trunk/Tools/Maestro: . Maestro Maestro.Base Maestro.Base/Commands Maestro.Base/Commands/Conditions Maestro.Base/Properties Maestro.Base/UI/Preferences OSGeo.MapGuide.MaestroAPI OSGeo.MapGuide.MaestroAPI/Mapping Properties RtMapInspector RtMapInspector/Properties

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Wed Jan 11 08:27:11 EST 2012


Author: jng
Date: 2012-01-11 05:27:11 -0800 (Wed, 11 Jan 2012)
New Revision: 6419

Added:
   trunk/Tools/Maestro/Maestro.Base/Commands/Conditions/SupportedCommandConditionEvaluator.cs
   trunk/Tools/Maestro/Maestro.Base/Commands/RtMapInspectorCommand.cs
   trunk/Tools/Maestro/RtMapInspector/
   trunk/Tools/Maestro/RtMapInspector/MainForm.Designer.cs
   trunk/Tools/Maestro/RtMapInspector/MainForm.cs
   trunk/Tools/Maestro/RtMapInspector/MainForm.resx
   trunk/Tools/Maestro/RtMapInspector/Program.cs
   trunk/Tools/Maestro/RtMapInspector/Properties/
   trunk/Tools/Maestro/RtMapInspector/Properties/AssemblyInfo.cs
   trunk/Tools/Maestro/RtMapInspector/Properties/Resources.Designer.cs
   trunk/Tools/Maestro/RtMapInspector/Properties/Resources.resx
   trunk/Tools/Maestro/RtMapInspector/Properties/Settings.Designer.cs
   trunk/Tools/Maestro/RtMapInspector/Properties/Settings.settings
   trunk/Tools/Maestro/RtMapInspector/RtMapInspector.csproj
Modified:
   trunk/Tools/Maestro/Maestro.Base/Maestro.Base.addin
   trunk/Tools/Maestro/Maestro.Base/Maestro.Base.csproj
   trunk/Tools/Maestro/Maestro.Base/Properties/Resources.Designer.cs
   trunk/Tools/Maestro/Maestro.Base/Properties/Resources.resx
   trunk/Tools/Maestro/Maestro.Base/UI/Preferences/ConfigProperties.cs
   trunk/Tools/Maestro/Maestro.Base/UI/Preferences/GeneralPreferencesCtrl.Designer.cs
   trunk/Tools/Maestro/Maestro.Base/UI/Preferences/GeneralPreferencesCtrl.cs
   trunk/Tools/Maestro/Maestro.Base/UI/Preferences/GeneralPreferencesCtrl.resx
   trunk/Tools/Maestro/Maestro/Maestro_All.sln
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Mapping/RuntimeMap.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/PlatformConnectionBase.cs
   trunk/Tools/Maestro/Properties/GlobalAssemblyInfo.cs
Log:
#1622: This submission implements a viewer/inspector for the Runtime Map state

Modified: trunk/Tools/Maestro/Maestro/Maestro_All.sln
===================================================================
--- trunk/Tools/Maestro/Maestro/Maestro_All.sln	2012-01-11 10:38:34 UTC (rev 6418)
+++ trunk/Tools/Maestro/Maestro/Maestro_All.sln	2012-01-11 13:27:11 UTC (rev 6419)
@@ -124,6 +124,8 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Maestro.AddIn.FdoToolbox", "..\Maestro.AddIn.FdoToolbox\Maestro.AddIn.FdoToolbox.csproj", "{8787FF3F-552F-46BE-B9D7-548B6162B079}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RtMapInspector", "..\RtMapInspector\RtMapInspector.csproj", "{E204559D-EE92-4792-96E2-06F45654FAFC}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -286,6 +288,10 @@
 		{8787FF3F-552F-46BE-B9D7-548B6162B079}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{8787FF3F-552F-46BE-B9D7-548B6162B079}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{8787FF3F-552F-46BE-B9D7-548B6162B079}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E204559D-EE92-4792-96E2-06F45654FAFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E204559D-EE92-4792-96E2-06F45654FAFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E204559D-EE92-4792-96E2-06F45654FAFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E204559D-EE92-4792-96E2-06F45654FAFC}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

Added: trunk/Tools/Maestro/Maestro.Base/Commands/Conditions/SupportedCommandConditionEvaluator.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Commands/Conditions/SupportedCommandConditionEvaluator.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Base/Commands/Conditions/SupportedCommandConditionEvaluator.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -0,0 +1,60 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+using ICSharpCode.Core;
+using Maestro.Base.Services;
+using OSGeo.MapGuide.MaestroAPI.Commands;
+
+namespace Maestro.Base.Commands.Conditions
+{
+    public class SupportedCommandConditionEvaluator : IConditionEvaluator
+    {
+        public bool IsValid(object caller, Condition condition)
+        {
+            var wb = Workbench.Instance;
+            if (wb != null)
+            {
+                var exp = wb.ActiveSiteExplorer;
+                if (exp != null)
+                {
+                    var cmds = condition.Properties["commands"].Split(',');
+                    var connMgr = ServiceRegistry.GetService<ServerConnectionManager>();
+                    var conn = connMgr.GetConnection(exp.ConnectionName);
+
+                    int[] caps = conn.Capabilities.SupportedCommands;
+                    foreach (var cmdName in cmds)
+                    {
+                        try 
+                        {
+                            CommandType cmd = (CommandType)Enum.Parse(typeof(CommandType), cmdName);
+                            if (Array.IndexOf(caps, (int)cmd) < 0)
+                                return false;
+                        }
+                        catch { return false; }
+                    }
+                    return true;
+                }
+            }
+            return false;
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.Base/Commands/RtMapInspectorCommand.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Commands/RtMapInspectorCommand.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Base/Commands/RtMapInspectorCommand.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -0,0 +1,56 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+using ICSharpCode.Core;
+using Maestro.Base.UI.Preferences;
+using Maestro.Shared.UI;
+using System.IO;
+using System.Diagnostics;
+
+namespace Maestro.Base.Commands
+{
+    public class RtMapInspectorCommand : AbstractMenuCommand
+    {
+        public override void Run()
+        {
+            string exe = PropertyService.Get(ConfigProperties.RtMapInspectorPath, "");
+
+            if (!File.Exists(exe))
+            {
+                using (var dlg = DialogFactory.OpenFile())
+                {
+                    dlg.Title = string.Format(Properties.Resources.LocateExecutable, "RtMapInspector.exe");
+                    dlg.Filter = Properties.Resources.FilterExecutables;
+                    if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+                    {
+                        exe = dlg.FileName;
+                        PropertyService.Set(ConfigProperties.MgCookerPath, exe);
+                    }
+                }
+            }
+
+            var procInfo = new ProcessStartInfo(exe);
+            procInfo.WorkingDirectory = Path.GetDirectoryName(exe);
+            var proc = Process.Start(procInfo);
+        }
+    }
+}

Modified: trunk/Tools/Maestro/Maestro.Base/Maestro.Base.addin
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Maestro.Base.addin	2012-01-11 10:38:34 UTC (rev 6418)
+++ trunk/Tools/Maestro/Maestro.Base/Maestro.Base.addin	2012-01-11 13:27:11 UTC (rev 6419)
@@ -23,6 +23,7 @@
             <ConditionEvaluator name="HasDocuments" class="Maestro.Base.Commands.Conditions.NonZeroDocumentConditionEvaluator" />
             <ConditionEvaluator name="ResourceType" class="Maestro.Base.Commands.Conditions.ResourceTypeConditionEvaluator" />
             <ConditionEvaluator name="NoConnectionOfType" class="Maestro.Base.Commands.Conditions.ConnectionProviderConditionEvaluator" />
+            <ConditionEvaluator name="SupportedCommand" class="Maestro.Base.Commands.Conditions.SupportedCommandConditionEvaluator" />
         </Import>
     </Runtime>
 
@@ -664,6 +665,9 @@
         <MenuItem id="LocalFsPreview"
                   label="${res:LocalFsPreview}"
                   class="Maestro.Base.Commands.LocalFeatureSourcePreviewCommand"/>
+        <MenuItem id="RtMapInspector"
+                  label="${res:RtMapInspector}"
+                  class="Maestro.Base.Commands.RtMapInspectorCommand"/>
         <MenuItem id="ServerMonitor"
                   label="${res:ServerMonitor}"
                   icon="system_monitor"

Modified: trunk/Tools/Maestro/Maestro.Base/Maestro.Base.csproj
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Maestro.Base.csproj	2012-01-11 10:38:34 UTC (rev 6418)
+++ trunk/Tools/Maestro/Maestro.Base/Maestro.Base.csproj	2012-01-11 13:27:11 UTC (rev 6419)
@@ -67,11 +67,13 @@
     <Compile Include="Commands\Conditions\SelectedItemConditionEvaluator.cs" />
     <Compile Include="Commands\Conditions\SelectedRootItemConditionEvaluator.cs" />
     <Compile Include="Commands\Conditions\NonZeroDocumentConditionEvaluator.cs" />
+    <Compile Include="Commands\Conditions\SupportedCommandConditionEvaluator.cs" />
     <Compile Include="Commands\CopyCommand.cs" />
     <Compile Include="Commands\CreatePackageCommand.cs" />
     <Compile Include="Commands\CutCommand.cs" />
     <Compile Include="Commands\EditAsXmlCommand.cs" />
     <Compile Include="Commands\EditPackageCommand.cs" />
+    <Compile Include="Commands\RtMapInspectorCommand.cs" />
     <Compile Include="Commands\SiteExplorer\EditResourceHeaderCommand.cs" />
     <Compile Include="Commands\LoadPackageCommand.cs" />
     <Compile Include="Commands\LocalFeatureSourcePreviewCommand.cs" />

Modified: trunk/Tools/Maestro/Maestro.Base/Properties/Resources.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Properties/Resources.Designer.cs	2012-01-11 10:38:34 UTC (rev 6418)
+++ trunk/Tools/Maestro/Maestro.Base/Properties/Resources.Designer.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -1863,6 +1863,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Runtime Map Inspector.
+        /// </summary>
+        internal static string RtMapInspector {
+            get {
+                return ResourceManager.GetString("RtMapInspector", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Saved resource content to {0}.
         /// </summary>
         internal static string SavedResource {

Modified: trunk/Tools/Maestro/Maestro.Base/Properties/Resources.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Properties/Resources.resx	2012-01-11 10:38:34 UTC (rev 6418)
+++ trunk/Tools/Maestro/Maestro.Base/Properties/Resources.resx	2012-01-11 13:27:11 UTC (rev 6419)
@@ -1082,4 +1082,7 @@
   <data name="Menu_Tools_Translate_Desc" xml:space="preserve">
     <value>Translate this Layout</value>
   </data>
+  <data name="RtMapInspector" xml:space="preserve">
+    <value>Runtime Map Inspector</value>
+  </data>
 </root>
\ No newline at end of file

Modified: trunk/Tools/Maestro/Maestro.Base/UI/Preferences/ConfigProperties.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/UI/Preferences/ConfigProperties.cs	2012-01-11 10:38:34 UTC (rev 6418)
+++ trunk/Tools/Maestro/Maestro.Base/UI/Preferences/ConfigProperties.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -36,6 +36,7 @@
         public const string OpenColor = "General.OpenColor";
         public const string DirtyColor = "General.DirtyColor";
         public const string MgCookerPath = "General.MgCookerPath";
+        public const string RtMapInspectorPath = "General.RtMapInspectorPath";
         public const string LocalFsPreviewPath = "General.LocalFsPreviewPath";
         public const string ValidateOnSave = "General.ValidateResourceOnSave";
         public const string XsdSchemaPath = "Editor.XsdSchemaPath";
@@ -62,6 +63,7 @@
             Props.Set(ConfigProperties.OpenColor, DefaultOpenColor);
             Props.Set(ConfigProperties.DirtyColor, DefaultDirtyColor);
             Props.Set(ConfigProperties.MgCookerPath, DefaultMgCookerPath);
+            Props.Set(ConfigProperties.RtMapInspectorPath, DefaultRtMapInspectorPath);
             Props.Set(ConfigProperties.LocalFsPreviewPath, DefaultLocalFsPreviewPath);
             Props.Set(ConfigProperties.ShowTipOfTheDay, DefaultShowTipOfTheDay);
         }
@@ -72,6 +74,8 @@
 
         public static string DefaultLocalFsPreviewPath { get { return Path.Combine(FileUtility.ApplicationRootPath, "MaestroFsPreview.exe"); } }
 
+        public static string DefaultRtMapInspectorPath { get { return Path.Combine(FileUtility.ApplicationRootPath, "RtMapInspector.exe"); } }
+
         public static Color DefaultOpenColor { get { return Color.LightGreen; } }
 
         public static Color DefaultDirtyColor { get { return Color.Pink; } }

Modified: trunk/Tools/Maestro/Maestro.Base/UI/Preferences/GeneralPreferencesCtrl.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/UI/Preferences/GeneralPreferencesCtrl.Designer.cs	2012-01-11 10:38:34 UTC (rev 6418)
+++ trunk/Tools/Maestro/Maestro.Base/UI/Preferences/GeneralPreferencesCtrl.Designer.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -36,6 +36,7 @@
             this.txtTemplatePath = new System.Windows.Forms.TextBox();
             this.btnBrowseTemplatePath = new System.Windows.Forms.Button();
             this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.chkShowTipOfTheDay = new System.Windows.Forms.CheckBox();
             this.chkOutbound = new System.Windows.Forms.CheckBox();
             this.chkMessages = new System.Windows.Forms.CheckBox();
             this.groupBox2 = new System.Windows.Forms.GroupBox();
@@ -50,7 +51,9 @@
             this.cmbOpenedColor = new Maestro.Editors.Common.ColorComboBox();
             this.label6 = new System.Windows.Forms.Label();
             this.label5 = new System.Windows.Forms.Label();
-            this.chkShowTipOfTheDay = new System.Windows.Forms.CheckBox();
+            this.btnBrowseRtMapInspector = new System.Windows.Forms.Button();
+            this.txtRtMapInspector = new System.Windows.Forms.TextBox();
+            this.label7 = new System.Windows.Forms.Label();
             this.groupBox1.SuspendLayout();
             this.groupBox2.SuspendLayout();
             this.groupBox3.SuspendLayout();
@@ -102,6 +105,12 @@
             this.groupBox1.Name = "groupBox1";
             this.groupBox1.TabStop = false;
             // 
+            // chkShowTipOfTheDay
+            // 
+            resources.ApplyResources(this.chkShowTipOfTheDay, "chkShowTipOfTheDay");
+            this.chkShowTipOfTheDay.Name = "chkShowTipOfTheDay";
+            this.chkShowTipOfTheDay.UseVisualStyleBackColor = true;
+            // 
             // chkOutbound
             // 
             resources.ApplyResources(this.chkOutbound, "chkOutbound");
@@ -117,6 +126,9 @@
             // groupBox2
             // 
             resources.ApplyResources(this.groupBox2, "groupBox2");
+            this.groupBox2.Controls.Add(this.label7);
+            this.groupBox2.Controls.Add(this.btnBrowseRtMapInspector);
+            this.groupBox2.Controls.Add(this.txtRtMapInspector);
             this.groupBox2.Controls.Add(this.btnBrowseFsPreview);
             this.groupBox2.Controls.Add(this.txtFsPreview);
             this.groupBox2.Controls.Add(this.btnBrowseMgCooker);
@@ -194,12 +206,24 @@
             resources.ApplyResources(this.label5, "label5");
             this.label5.Name = "label5";
             // 
-            // chkShowTipOfTheDay
+            // btnBrowseRtMapInspector
             // 
-            resources.ApplyResources(this.chkShowTipOfTheDay, "chkShowTipOfTheDay");
-            this.chkShowTipOfTheDay.Name = "chkShowTipOfTheDay";
-            this.chkShowTipOfTheDay.UseVisualStyleBackColor = true;
+            resources.ApplyResources(this.btnBrowseRtMapInspector, "btnBrowseRtMapInspector");
+            this.btnBrowseRtMapInspector.Name = "btnBrowseRtMapInspector";
+            this.btnBrowseRtMapInspector.UseVisualStyleBackColor = true;
+            this.btnBrowseRtMapInspector.Click += new System.EventHandler(this.btnBrowseRtMapInspector_Click);
             // 
+            // txtRtMapInspector
+            // 
+            resources.ApplyResources(this.txtRtMapInspector, "txtRtMapInspector");
+            this.txtRtMapInspector.Name = "txtRtMapInspector";
+            this.txtRtMapInspector.ReadOnly = true;
+            // 
+            // label7
+            // 
+            resources.ApplyResources(this.label7, "label7");
+            this.label7.Name = "label7";
+            // 
             // GeneralPreferencesCtrl
             // 
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
@@ -249,5 +273,8 @@
         private Maestro.Editors.Common.ColorComboBox cmbModifiedColor;
         private Maestro.Editors.Common.ColorComboBox cmbOpenedColor;
         private System.Windows.Forms.CheckBox chkShowTipOfTheDay;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Button btnBrowseRtMapInspector;
+        private System.Windows.Forms.TextBox txtRtMapInspector;
     }
 }

Modified: trunk/Tools/Maestro/Maestro.Base/UI/Preferences/GeneralPreferencesCtrl.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/UI/Preferences/GeneralPreferencesCtrl.cs	2012-01-11 10:38:34 UTC (rev 6418)
+++ trunk/Tools/Maestro/Maestro.Base/UI/Preferences/GeneralPreferencesCtrl.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -62,6 +62,7 @@
 
             txtFsPreview.Text = Props.Get(ConfigProperties.LocalFsPreviewPath, ConfigProperties.DefaultLocalFsPreviewPath);
             txtMgCooker.Text = Props.Get(ConfigProperties.MgCookerPath, ConfigProperties.DefaultMgCookerPath);
+            txtRtMapInspector.Text = Props.Get(ConfigProperties.RtMapInspectorPath, ConfigProperties.DefaultRtMapInspectorPath);
 
             cmbOpenedColor.CurrentColor = Props.Get(ConfigProperties.OpenColor, Color.LightGreen);
             cmbModifiedColor.CurrentColor = Props.Get(ConfigProperties.DirtyColor, Color.Pink);
@@ -99,6 +100,7 @@
             Apply(ConfigProperties.UserTemplatesDirectory, txtTemplatePath.Text);
             Apply(ConfigProperties.MgCookerPath, txtMgCooker.Text);
             Apply(ConfigProperties.LocalFsPreviewPath, txtFsPreview.Text);
+            Apply(ConfigProperties.RtMapInspectorPath, txtRtMapInspector.Text);
             Apply(ConfigProperties.OpenColor, (Color)cmbOpenedColor.CurrentColor);
             Apply(ConfigProperties.DirtyColor, (Color)cmbModifiedColor.CurrentColor);
             Apply(ConfigProperties.ShowTipOfTheDay, chkShowTipOfTheDay.Checked);
@@ -155,5 +157,18 @@
                 }
             }
         }
+
+        private void btnBrowseRtMapInspector_Click(object sender, EventArgs e)
+        {
+            using (var dlg = DialogFactory.OpenFile())
+            {
+                dlg.Title = string.Format(Properties.Resources.LocateExecutable, "RtMapInspector.exe");
+                dlg.Filter = Properties.Resources.FilterExecutables;
+                if (dlg.ShowDialog() == DialogResult.OK)
+                {
+                    txtRtMapInspector.Text = dlg.FileName;
+                }
+            }
+        }
     }
 }

Modified: trunk/Tools/Maestro/Maestro.Base/UI/Preferences/GeneralPreferencesCtrl.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/UI/Preferences/GeneralPreferencesCtrl.resx	2012-01-11 10:38:34 UTC (rev 6418)
+++ trunk/Tools/Maestro/Maestro.Base/UI/Preferences/GeneralPreferencesCtrl.resx	2012-01-11 13:27:11 UTC (rev 6419)
@@ -285,6 +285,66 @@
   <data name="groupBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Left, Right</value>
   </data>
+  <data name="&gt;&gt;chkShowTipOfTheDay.Name" xml:space="preserve">
+    <value>chkShowTipOfTheDay</value>
+  </data>
+  <data name="&gt;&gt;chkShowTipOfTheDay.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;chkShowTipOfTheDay.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;chkShowTipOfTheDay.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;chkOutbound.Name" xml:space="preserve">
+    <value>chkOutbound</value>
+  </data>
+  <data name="&gt;&gt;chkOutbound.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;chkOutbound.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;chkOutbound.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;chkMessages.Name" xml:space="preserve">
+    <value>chkMessages</value>
+  </data>
+  <data name="&gt;&gt;chkMessages.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;chkMessages.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;chkMessages.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 93</value>
+  </data>
+  <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>426, 50</value>
+  </data>
+  <data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="groupBox1.Text" xml:space="preserve">
+    <value>Show on Startup</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
   <data name="chkShowTipOfTheDay.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -366,33 +426,90 @@
   <data name="&gt;&gt;chkMessages.ZOrder" xml:space="preserve">
     <value>2</value>
   </data>
-  <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
-    <value>16, 93</value>
+  <data name="groupBox2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
   </data>
-  <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
-    <value>426, 50</value>
+  <data name="label7.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
-    <value>6</value>
+  <data name="label7.Location" type="System.Drawing.Point, System.Drawing">
+    <value>17, 74</value>
   </data>
-  <data name="groupBox1.Text" xml:space="preserve">
-    <value>Show on Startup</value>
+  <data name="label7.Size" type="System.Drawing.Size, System.Drawing">
+    <value>103, 13</value>
   </data>
-  <data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
-    <value>groupBox1</value>
+  <data name="label7.TabIndex" type="System.Int32, mscorlib">
+    <value>14</value>
   </data>
-  <data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="label7.Text" xml:space="preserve">
+    <value>RtMapInspector.exe</value>
   </data>
-  <data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
-    <value>$this</value>
+  <data name="&gt;&gt;label7.Name" xml:space="preserve">
+    <value>label7</value>
   </data>
-  <data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
-    <value>2</value>
+  <data name="&gt;&gt;label7.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="groupBox2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+  <data name="&gt;&gt;label7.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name="&gt;&gt;label7.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="btnBrowseRtMapInspector.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Right</value>
+  </data>
+  <data name="btnBrowseRtMapInspector.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="btnBrowseRtMapInspector.Location" type="System.Drawing.Point, System.Drawing">
+    <value>386, 69</value>
+  </data>
+  <data name="btnBrowseRtMapInspector.Size" type="System.Drawing.Size, System.Drawing">
+    <value>25, 23</value>
+  </data>
+  <data name="btnBrowseRtMapInspector.TabIndex" type="System.Int32, mscorlib">
+    <value>13</value>
+  </data>
+  <data name="btnBrowseRtMapInspector.Text" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseRtMapInspector.Name" xml:space="preserve">
+    <value>btnBrowseRtMapInspector</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseRtMapInspector.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseRtMapInspector.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name="&gt;&gt;btnBrowseRtMapInspector.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="txtRtMapInspector.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Left, Right</value>
   </data>
+  <data name="txtRtMapInspector.Location" type="System.Drawing.Point, System.Drawing">
+    <value>141, 71</value>
+  </data>
+  <data name="txtRtMapInspector.Size" type="System.Drawing.Size, System.Drawing">
+    <value>239, 20</value>
+  </data>
+  <data name="txtRtMapInspector.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name="&gt;&gt;txtRtMapInspector.Name" xml:space="preserve">
+    <value>txtRtMapInspector</value>
+  </data>
+  <data name="&gt;&gt;txtRtMapInspector.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;txtRtMapInspector.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name="&gt;&gt;txtRtMapInspector.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
   <data name="btnBrowseFsPreview.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Right</value>
   </data>
@@ -418,7 +535,7 @@
     <value>groupBox2</value>
   </data>
   <data name="&gt;&gt;btnBrowseFsPreview.ZOrder" xml:space="preserve">
-    <value>0</value>
+    <value>3</value>
   </data>
   <data name="txtFsPreview.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Left, Right</value>
@@ -442,7 +559,7 @@
     <value>groupBox2</value>
   </data>
   <data name="&gt;&gt;txtFsPreview.ZOrder" xml:space="preserve">
-    <value>1</value>
+    <value>4</value>
   </data>
   <data name="btnBrowseMgCooker.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Right</value>
@@ -469,7 +586,7 @@
     <value>groupBox2</value>
   </data>
   <data name="&gt;&gt;btnBrowseMgCooker.ZOrder" xml:space="preserve">
-    <value>2</value>
+    <value>5</value>
   </data>
   <data name="label4.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
@@ -496,7 +613,7 @@
     <value>groupBox2</value>
   </data>
   <data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
-    <value>3</value>
+    <value>6</value>
   </data>
   <data name="txtMgCooker.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Left, Right</value>
@@ -520,7 +637,7 @@
     <value>groupBox2</value>
   </data>
   <data name="&gt;&gt;txtMgCooker.ZOrder" xml:space="preserve">
-    <value>4</value>
+    <value>7</value>
   </data>
   <data name="label3.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
@@ -547,13 +664,13 @@
     <value>groupBox2</value>
   </data>
   <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
-    <value>5</value>
+    <value>8</value>
   </data>
   <data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
     <value>16, 245</value>
   </data>
   <data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
-    <value>426, 94</value>
+    <value>426, 115</value>
   </data>
   <data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
     <value>7</value>
@@ -576,6 +693,78 @@
   <data name="groupBox3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Left, Right</value>
   </data>
+  <data name="&gt;&gt;cmbModifiedColor.Name" xml:space="preserve">
+    <value>cmbModifiedColor</value>
+  </data>
+  <data name="&gt;&gt;cmbModifiedColor.Type" xml:space="preserve">
+    <value>Maestro.Editors.Common.ColorComboBox, Maestro.Editors, Version=4.0.0.6359, Culture=neutral, PublicKeyToken=f526c48929fda856</value>
+  </data>
+  <data name="&gt;&gt;cmbModifiedColor.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;cmbModifiedColor.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;cmbOpenedColor.Name" xml:space="preserve">
+    <value>cmbOpenedColor</value>
+  </data>
+  <data name="&gt;&gt;cmbOpenedColor.Type" xml:space="preserve">
+    <value>Maestro.Editors.Common.ColorComboBox, Maestro.Editors, Version=4.0.0.6359, Culture=neutral, PublicKeyToken=f526c48929fda856</value>
+  </data>
+  <data name="&gt;&gt;cmbOpenedColor.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;cmbOpenedColor.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;label6.Name" xml:space="preserve">
+    <value>label6</value>
+  </data>
+  <data name="&gt;&gt;label6.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label6.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;label6.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;label5.Name" xml:space="preserve">
+    <value>label5</value>
+  </data>
+  <data name="&gt;&gt;label5.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label5.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;label5.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="groupBox3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 149</value>
+  </data>
+  <data name="groupBox3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>426, 90</value>
+  </data>
+  <data name="groupBox3.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="groupBox3.Text" xml:space="preserve">
+    <value>Site Explorer</value>
+  </data>
+  <data name="&gt;&gt;groupBox3.Name" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;groupBox3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;groupBox3.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;groupBox3.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
   <data name="cmbModifiedColor.Location" type="System.Drawing.Point, System.Drawing">
     <value>187, 49</value>
   </data>
@@ -589,7 +778,7 @@
     <value>cmbModifiedColor</value>
   </data>
   <data name="&gt;&gt;cmbModifiedColor.Type" xml:space="preserve">
-    <value>Maestro.Editors.Common.ColorComboBox, Maestro.Editors, Version=3.0.0.5728, Culture=neutral, PublicKeyToken=null</value>
+    <value>Maestro.Editors.Common.ColorComboBox, Maestro.Editors, Version=4.0.0.6359, Culture=neutral, PublicKeyToken=f526c48929fda856</value>
   </data>
   <data name="&gt;&gt;cmbModifiedColor.Parent" xml:space="preserve">
     <value>groupBox3</value>
@@ -610,7 +799,7 @@
     <value>cmbOpenedColor</value>
   </data>
   <data name="&gt;&gt;cmbOpenedColor.Type" xml:space="preserve">
-    <value>Maestro.Editors.Common.ColorComboBox, Maestro.Editors, Version=3.0.0.5728, Culture=neutral, PublicKeyToken=null</value>
+    <value>Maestro.Editors.Common.ColorComboBox, Maestro.Editors, Version=4.0.0.6359, Culture=neutral, PublicKeyToken=f526c48929fda856</value>
   </data>
   <data name="&gt;&gt;cmbOpenedColor.Parent" xml:space="preserve">
     <value>groupBox3</value>
@@ -672,35 +861,11 @@
   <data name="&gt;&gt;label5.ZOrder" xml:space="preserve">
     <value>3</value>
   </data>
-  <data name="groupBox3.Location" type="System.Drawing.Point, System.Drawing">
-    <value>16, 149</value>
-  </data>
-  <data name="groupBox3.Size" type="System.Drawing.Size, System.Drawing">
-    <value>426, 90</value>
-  </data>
-  <data name="groupBox3.TabIndex" type="System.Int32, mscorlib">
-    <value>8</value>
-  </data>
-  <data name="groupBox3.Text" xml:space="preserve">
-    <value>Site Explorer</value>
-  </data>
-  <data name="&gt;&gt;groupBox3.Name" xml:space="preserve">
-    <value>groupBox3</value>
-  </data>
-  <data name="&gt;&gt;groupBox3.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name="&gt;&gt;groupBox3.Parent" xml:space="preserve">
-    <value>$this</value>
-  </data>
-  <data name="&gt;&gt;groupBox3.ZOrder" xml:space="preserve">
-    <value>0</value>
-  </data>
   <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
   <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
-    <value>459, 351</value>
+    <value>459, 376</value>
   </data>
   <data name="&gt;&gt;$this.Name" xml:space="preserve">
     <value>GeneralPreferencesCtrl</value>

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Mapping/RuntimeMap.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Mapping/RuntimeMap.cs	2012-01-11 10:38:34 UTC (rev 6418)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Mapping/RuntimeMap.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -1149,6 +1149,23 @@
         }
 
         /// <summary>
+        /// Gets the groups of the specified group.
+        /// </summary>
+        /// <param name="groupName">Name of the group.</param>
+        /// <returns></returns>
+        public RuntimeMapGroup[] GetGroupsOfGroup(string groupName)
+        {
+            Check.NotEmpty(groupName, "groupName");
+            List<RuntimeMapGroup> groups = new List<RuntimeMapGroup>();
+            foreach (var grp in this.Groups)
+            {
+                if (groupName.Equals(grp.Group))
+                    groups.Add(grp);
+            }
+            return groups.ToArray();
+        }
+
+        /// <summary>
         /// Saves this instance. The changes are propagated back to the MapGuide Server
         /// </summary>
         public virtual void Save()

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/PlatformConnectionBase.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/PlatformConnectionBase.cs	2012-01-11 10:38:34 UTC (rev 6418)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/PlatformConnectionBase.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -1931,7 +1931,7 @@
         /// <returns></returns>
         public virtual RuntimeMap OpenMap(string runtimeMapResourceId)
         {
-            if (!runtimeMapResourceId.StartsWith("Session:" + this.SessionID + "//") || !runtimeMapResourceId.EndsWith(".Map"))
+            if (!runtimeMapResourceId.StartsWith("Session:") || !runtimeMapResourceId.EndsWith(".Map"))
                 throw new ArgumentException("Runtime maps must be in the current session repository");
 
             var map = new RuntimeMap(GetInterface());

Modified: trunk/Tools/Maestro/Properties/GlobalAssemblyInfo.cs
===================================================================
--- trunk/Tools/Maestro/Properties/GlobalAssemblyInfo.cs	2012-01-11 10:38:34 UTC (rev 6418)
+++ trunk/Tools/Maestro/Properties/GlobalAssemblyInfo.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -23,7 +23,7 @@
 
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Open Source Geospatial Foundation")]
-[assembly: AssemblyCopyright("Copyright (c) 2011, Jackie Ng")]
+[assembly: AssemblyCopyright("Copyright (c) 2012, Jackie Ng")]
 
 // Version information for an assembly consists of the following four values:
 //


Property changes on: trunk/Tools/Maestro/RtMapInspector
___________________________________________________________________
Added: svn:ignore
   + obj
bin


Added: trunk/Tools/Maestro/RtMapInspector/MainForm.Designer.cs
===================================================================
--- trunk/Tools/Maestro/RtMapInspector/MainForm.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/RtMapInspector/MainForm.Designer.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -0,0 +1,230 @@
+namespace RtMapInspector
+{
+    partial class MainForm
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.btnLoad = new System.Windows.Forms.Button();
+            this.label1 = new System.Windows.Forms.Label();
+            this.txtMapName = new System.Windows.Forms.TextBox();
+            this.txtSessionId = new System.Windows.Forms.TextBox();
+            this.txtResourceId = new System.Windows.Forms.TextBox();
+            this.rdResourceId = new System.Windows.Forms.RadioButton();
+            this.rdMapName = new System.Windows.Forms.RadioButton();
+            this.groupBox2 = new System.Windows.Forms.GroupBox();
+            this.trvLayersAndGroups = new System.Windows.Forms.TreeView();
+            this.imgList = new System.Windows.Forms.ImageList(this.components);
+            this.groupBox3 = new System.Windows.Forms.GroupBox();
+            this.properties = new System.Windows.Forms.PropertyGrid();
+            this.groupBox1.SuspendLayout();
+            this.groupBox2.SuspendLayout();
+            this.groupBox3.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // 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.btnLoad);
+            this.groupBox1.Controls.Add(this.label1);
+            this.groupBox1.Controls.Add(this.txtMapName);
+            this.groupBox1.Controls.Add(this.txtSessionId);
+            this.groupBox1.Controls.Add(this.txtResourceId);
+            this.groupBox1.Controls.Add(this.rdResourceId);
+            this.groupBox1.Controls.Add(this.rdMapName);
+            this.groupBox1.Location = new System.Drawing.Point(13, 13);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(597, 135);
+            this.groupBox1.TabIndex = 0;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Source";
+            // 
+            // btnLoad
+            // 
+            this.btnLoad.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnLoad.Location = new System.Drawing.Point(497, 97);
+            this.btnLoad.Name = "btnLoad";
+            this.btnLoad.Size = new System.Drawing.Size(75, 23);
+            this.btnLoad.TabIndex = 6;
+            this.btnLoad.Text = "Load Map";
+            this.btnLoad.UseVisualStyleBackColor = true;
+            this.btnLoad.Click += new System.EventHandler(this.btnLoad_Click);
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(17, 22);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(58, 13);
+            this.label1.TabIndex = 5;
+            this.label1.Text = "Session ID";
+            // 
+            // txtMapName
+            // 
+            this.txtMapName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtMapName.Location = new System.Drawing.Point(133, 45);
+            this.txtMapName.Name = "txtMapName";
+            this.txtMapName.Size = new System.Drawing.Size(439, 20);
+            this.txtMapName.TabIndex = 4;
+            // 
+            // txtSessionId
+            // 
+            this.txtSessionId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtSessionId.Location = new System.Drawing.Point(133, 19);
+            this.txtSessionId.Name = "txtSessionId";
+            this.txtSessionId.Size = new System.Drawing.Size(439, 20);
+            this.txtSessionId.TabIndex = 3;
+            // 
+            // txtResourceId
+            // 
+            this.txtResourceId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtResourceId.Location = new System.Drawing.Point(133, 71);
+            this.txtResourceId.Name = "txtResourceId";
+            this.txtResourceId.Size = new System.Drawing.Size(439, 20);
+            this.txtResourceId.TabIndex = 2;
+            // 
+            // rdResourceId
+            // 
+            this.rdResourceId.AutoSize = true;
+            this.rdResourceId.Location = new System.Drawing.Point(20, 72);
+            this.rdResourceId.Name = "rdResourceId";
+            this.rdResourceId.Size = new System.Drawing.Size(85, 17);
+            this.rdResourceId.TabIndex = 1;
+            this.rdResourceId.TabStop = true;
+            this.rdResourceId.Text = "Resource ID";
+            this.rdResourceId.UseVisualStyleBackColor = true;
+            // 
+            // rdMapName
+            // 
+            this.rdMapName.AutoSize = true;
+            this.rdMapName.Checked = true;
+            this.rdMapName.Location = new System.Drawing.Point(20, 45);
+            this.rdMapName.Name = "rdMapName";
+            this.rdMapName.Size = new System.Drawing.Size(77, 17);
+            this.rdMapName.TabIndex = 0;
+            this.rdMapName.TabStop = true;
+            this.rdMapName.Text = "Map Name";
+            this.rdMapName.UseVisualStyleBackColor = true;
+            // 
+            // groupBox2
+            // 
+            this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.groupBox2.Controls.Add(this.trvLayersAndGroups);
+            this.groupBox2.Location = new System.Drawing.Point(13, 155);
+            this.groupBox2.Name = "groupBox2";
+            this.groupBox2.Size = new System.Drawing.Size(321, 328);
+            this.groupBox2.TabIndex = 1;
+            this.groupBox2.TabStop = false;
+            this.groupBox2.Text = "Layers and Groups";
+            // 
+            // trvLayersAndGroups
+            // 
+            this.trvLayersAndGroups.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.trvLayersAndGroups.ImageIndex = 0;
+            this.trvLayersAndGroups.ImageList = this.imgList;
+            this.trvLayersAndGroups.Location = new System.Drawing.Point(3, 16);
+            this.trvLayersAndGroups.Name = "trvLayersAndGroups";
+            this.trvLayersAndGroups.SelectedImageIndex = 0;
+            this.trvLayersAndGroups.Size = new System.Drawing.Size(315, 309);
+            this.trvLayersAndGroups.TabIndex = 0;
+            this.trvLayersAndGroups.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.trvLayersAndGroups_AfterSelect);
+            // 
+            // imgList
+            // 
+            this.imgList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgList.ImageStream")));
+            this.imgList.TransparentColor = System.Drawing.Color.Transparent;
+            this.imgList.Images.SetKeyName(0, "folder.png");
+            this.imgList.Images.SetKeyName(1, "folder--minus.png");
+            this.imgList.Images.SetKeyName(2, "layer.png");
+            this.imgList.Images.SetKeyName(3, "layer--minus.png");
+            this.imgList.Images.SetKeyName(4, "map.png");
+            // 
+            // groupBox3
+            // 
+            this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.groupBox3.Controls.Add(this.properties);
+            this.groupBox3.Location = new System.Drawing.Point(340, 155);
+            this.groupBox3.Name = "groupBox3";
+            this.groupBox3.Size = new System.Drawing.Size(270, 328);
+            this.groupBox3.TabIndex = 2;
+            this.groupBox3.TabStop = false;
+            this.groupBox3.Text = "Properties";
+            // 
+            // properties
+            // 
+            this.properties.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.properties.Location = new System.Drawing.Point(3, 16);
+            this.properties.Name = "properties";
+            this.properties.Size = new System.Drawing.Size(264, 309);
+            this.properties.TabIndex = 0;
+            // 
+            // MainForm
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(622, 495);
+            this.Controls.Add(this.groupBox3);
+            this.Controls.Add(this.groupBox2);
+            this.Controls.Add(this.groupBox1);
+            this.Name = "MainForm";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+            this.Text = "Runtime Map Inspector";
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.groupBox2.ResumeLayout(false);
+            this.groupBox3.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox txtMapName;
+        private System.Windows.Forms.TextBox txtSessionId;
+        private System.Windows.Forms.TextBox txtResourceId;
+        private System.Windows.Forms.RadioButton rdResourceId;
+        private System.Windows.Forms.RadioButton rdMapName;
+        private System.Windows.Forms.Button btnLoad;
+        private System.Windows.Forms.GroupBox groupBox2;
+        private System.Windows.Forms.TreeView trvLayersAndGroups;
+        private System.Windows.Forms.GroupBox groupBox3;
+        private System.Windows.Forms.PropertyGrid properties;
+        private System.Windows.Forms.ImageList imgList;
+    }
+}
+

Added: trunk/Tools/Maestro/RtMapInspector/MainForm.cs
===================================================================
--- trunk/Tools/Maestro/RtMapInspector/MainForm.cs	                        (rev 0)
+++ trunk/Tools/Maestro/RtMapInspector/MainForm.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -0,0 +1,525 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.MaestroAPI.Mapping;
+using OSGeo.MapGuide.MaestroAPI;
+using Maestro.Login;
+using OSGeo.MapGuide.MaestroAPI.Services;
+using OSGeo.MapGuide.ObjectModels.Common;
+
+namespace RtMapInspector
+{
+    public partial class MainForm : Form
+    {
+        public MainForm()
+        {
+            InitializeComponent();
+        }
+
+        private IServerConnection _conn;
+        private IMappingService _mappingSvc;
+        private RuntimeMap _rtMap;
+
+        #region Design-time property wrappers
+
+        class PointDecorator
+        {
+            private string _str;
+
+            public PointDecorator(IPoint2D pt)
+            {
+                _str = "(" + pt.X + ", " + pt.Y + ")";
+            }
+
+            public override string ToString()
+            {
+                return _str;
+            }
+        }
+
+        class BoxDecorator
+        {
+            private string _str;
+
+            public BoxDecorator(IEnvelope env)
+            {
+                _str = string.Format("( ({0}, {1}),  ({2}, {3}) )", env.MinX, env.MinY, env.MaxX, env.MaxY);
+            }
+
+            public override string ToString()
+            {
+                return _str;
+            }
+        }
+
+        class MapDecorator
+        {
+            private RuntimeMap _map;
+
+            [Category("Map Properties")]
+            [ReadOnly(true)]
+            public string Name
+            {
+                get { return _map.Name; }
+                set { _map.Name = value; }
+            }
+
+            [Category("Map Properties")]
+            [ReadOnly(true)]
+            public Color BackgroundColor
+            {
+                get { return _map.BackgroundColor; }
+                set { _map.BackgroundColor = value; }
+            }
+
+            [Category("Map Properties")]
+            [ReadOnly(true)]
+            public int DisplayDpi
+            {
+                get { return _map.DisplayDpi; }
+                set { _map.DisplayDpi = value; }
+            }
+
+            [Category("Map Properties")]
+            [ReadOnly(true)]
+            public int DisplayHeight
+            {
+                get { return _map.DisplayHeight; }
+                set { _map.DisplayWidth = value; }
+            }
+
+            [Category("Map Properties")]
+            [ReadOnly(true)]
+            public int DisplayWidth
+            {
+                get { return _map.DisplayWidth; }
+                set { _map.DisplayWidth = value; }
+            }
+
+            [Category("Map Properties")]
+            [ReadOnly(true)]
+            public string ResourceId
+            {
+                get { return _map.ResourceID; }
+                set { _map.ResourceID = value; }
+            }
+
+            [Category("Map Properties")]
+            [ReadOnly(true)]
+            public string ObjectId
+            {
+                get { return _map.ObjectId; }
+            }
+
+            [Category("Map Properties")]
+            [ReadOnly(true)]
+            public string CoordinateSystem
+            {
+                get { return _map.CoordinateSystem; }
+            }
+
+            [Category("Map Properties")]
+            [ReadOnly(true)]
+            public double MetersPerUnit
+            {
+                get { return _map.MetersPerUnit; }
+            }
+
+            [Category("Map Properties")]
+            [ReadOnly(true)]
+            public PointDecorator ViewCenter
+            {
+                get { return new PointDecorator(_map.ViewCenter); }
+            }
+
+            [Category("Map Properties")]
+            [ReadOnly(true)]
+            public BoxDecorator DataExtent
+            {
+                get { return new BoxDecorator(_map.DataExtent); }
+            }
+
+            public MapDecorator(RuntimeMap map)
+            {
+                _map = map;
+            }
+        }
+
+        class GroupDecorator
+        {
+            private RuntimeMapGroup _group;
+
+            public GroupDecorator(RuntimeMapGroup group)
+            {
+                _group = group;
+            }
+
+            [Category("Group properties")]
+            [ReadOnly(true)]
+            public bool ExpandInLegend
+            {
+                get { return _group.ExpandInLegend; }
+                set { _group.ExpandInLegend = value; }
+            }
+
+            [Category("Group properties")]
+            [ReadOnly(true)]
+            public string Group
+            {
+                get { return _group.Group; }
+                set { _group.Group = value; }
+            }
+
+            [Category("Group properties")]
+            [ReadOnly(true)]
+            public string LegendLabel
+            {
+                get { return _group.LegendLabel; }
+                set { _group.LegendLabel = value; }
+            }
+
+            [Category("Group properties")]
+            [ReadOnly(true)]
+            public string Name
+            {
+                get { return _group.Name; }
+                set { _group.Name = value; }
+            }
+
+            [Category("Group properties")]
+            [ReadOnly(true)]
+            public string ObjectId
+            {
+                get { return _group.ObjectId; }
+            }
+
+            [Category("Group properties")]
+            [ReadOnly(true)]
+            public bool ShowInLegend
+            {
+                get { return _group.ShowInLegend; }
+                set { _group.ShowInLegend = value; }
+            }
+
+            [Category("Group properties")]
+            [ReadOnly(true)]
+            public int Type
+            {
+                get { return _group.Type; }
+            }
+
+            [Category("Group properties")]
+            [ReadOnly(true)]
+            public bool Visible
+            {
+                get { return _group.Visible; }
+                set { _group.Visible = value; }
+            }
+        }
+
+        class LayerDecorator
+        {
+            private RuntimeMapLayer _layer;
+
+            public LayerDecorator(RuntimeMapLayer layer)
+            {
+                _layer = layer;
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public double DisplayOrder
+            {
+                get { return _layer.DisplayOrder; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public bool ExpandInLegend
+            {
+                get { return _layer.ExpandInLegend; }
+                set { _layer.ExpandInLegend = value; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public string FeatureSourceID
+            {
+                get { return _layer.FeatureSourceID; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public string Filter
+            {
+                get { return _layer.Filter; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public string GeometryPropertyName
+            {
+                get { return _layer.GeometryPropertyName; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public string Group
+            {
+                get { return _layer.Group; }
+                set { _layer.Group = value; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public bool HasTooltips
+            {
+                get { return _layer.HasTooltips; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public string[] IdentityProperties
+            {
+                get { return new IdentityPropertyCollection(_layer.IdentityProperties).ToArray(); }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public string LayerDefinition
+            {
+                get { return _layer.LayerDefinitionID; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public string LegendLabel
+            {
+                get { return _layer.LegendLabel; }
+                set { _layer.LegendLabel = value; } 
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public string Name
+            {
+                get { return _layer.Name; }
+                set { _layer.Name = value; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public bool NeedsRefresh
+            {
+                get { return _layer.NeedsRefresh; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public string ObjectId
+            {
+                get { return _layer.ObjectId; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public string FeatureClass
+            {
+                get { return _layer.QualifiedClassName; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public string[] ScaleRanges
+            {
+                get { return new ScaleRangeCollection(_layer.ScaleRanges).ToArray(); }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public string SchemaName
+            {
+                get { return _layer.SchemaName; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public bool Selectable
+            {
+                get { return _layer.Selectable; }
+                set { _layer.Selectable = value; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public bool ShowInLegend
+            {
+                get { return _layer.ShowInLegend; }
+                set { _layer.ShowInLegend = value; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public int Type
+            {
+                get { return _layer.Type; }
+            }
+
+            [Category("Layer Properties")]
+            [ReadOnly(true)]
+            public bool Visible
+            {
+                get { return _layer.Visible; }
+                set { _layer.Visible = value; }
+            }
+        }
+
+        class ScaleRangeCollection : List<string>
+        {
+            public ScaleRangeCollection(RuntimeMapLayer.ScaleRange[] ranges)
+            {
+                foreach(var s in ranges )
+                {
+                    Add(s.MinScale + " : " + s.MaxScale);
+                }
+            }
+        }
+
+        class IdentityPropertyCollection : List<string>
+        {
+            public IdentityPropertyCollection(PropertyInfo[] props)
+            {
+                foreach (var p in props)
+                {
+                    Add(p.Name + " (" + p.Type.FullName + ")");
+                }
+            }
+        }
+
+        #endregion
+
+        protected override void OnLoad(EventArgs e)
+        {
+            base.OnLoad(e);
+            var login = new LoginDialog();
+            if (login.ShowDialog() == DialogResult.OK)
+            {
+                _conn = login.Connection;
+                if (Array.IndexOf(_conn.Capabilities.SupportedServices, (int)ServiceType.Mapping) < 0)
+                {
+                    MessageBox.Show(Properties.Resources.ErrIncompatibleConnection);
+                    Application.Exit();
+                }
+                _mappingSvc = (IMappingService)_conn.GetService((int)ServiceType.Mapping);
+            }
+            else
+            {
+                Application.Exit();
+            }
+        }
+
+        private void btnLoad_Click(object sender, EventArgs e)
+        {
+            _rtMap = null;
+            properties.SelectedObject = null;
+            trvLayersAndGroups.Nodes.Clear();
+            if (rdMapName.Checked)
+            {
+                _rtMap = _mappingSvc.OpenMap(string.Format("Session:{0}//{1}.Map", txtSessionId.Text, txtMapName.Text));
+            }
+            else if (rdResourceId.Checked)
+            {
+                _rtMap = _mappingSvc.OpenMap(txtResourceId.Text);
+            }
+
+            if (_rtMap == null)
+            {
+                MessageBox.Show(Properties.Resources.ErrFailedRuntimeMapOpen);
+                return;
+            }
+
+            InitTreeView();
+        }
+
+        const int IDX_GROUP = 0;
+        const int IDX_GROUP_HIDDEN = 1;
+        const int IDX_LAYER = 2;
+        const int IDX_LAYER_HIDDEN = 3;
+        const int IDX_MAP = 4;
+
+        private TreeNode CreateGroupNode(RuntimeMapGroup group)
+        {
+            var node = new TreeNode(group.LegendLabel);
+            node.Tag = new GroupDecorator(group);
+            node.ImageIndex = node.SelectedImageIndex = group.Visible ? IDX_GROUP : IDX_GROUP_HIDDEN;
+
+            foreach (var grp in _rtMap.GetGroupsOfGroup(group.Name))
+            {
+                node.Nodes.Add(CreateGroupNode(grp));
+            }
+
+            foreach (var layer in _rtMap.GetLayersOfGroup(group.Name))
+            {
+                node.Nodes.Add(CreateLayerNode(layer));
+            }
+
+            return node;
+        }
+
+        private TreeNode CreateLayerNode(RuntimeMapLayer layer)
+        {
+            var node = new TreeNode(layer.LegendLabel);
+            node.Tag = new LayerDecorator(layer);
+            node.ImageIndex = node.SelectedImageIndex = layer.Visible ? IDX_LAYER : IDX_LAYER_HIDDEN;
+            return node;
+        }
+
+        private void InitTreeView()
+        {
+            try
+            {
+                trvLayersAndGroups.BeginUpdate();
+                var node = new TreeNode(_rtMap.Name);
+                node.ImageIndex = node.SelectedImageIndex = IDX_MAP;
+                node.Tag = new MapDecorator(_rtMap);
+                trvLayersAndGroups.Nodes.Add(node);
+                foreach (var group in _rtMap.Groups)
+                {
+                    node.Nodes.Add(CreateGroupNode(group));
+                }
+            }
+            finally
+            {
+                trvLayersAndGroups.EndUpdate();
+            }
+        }
+
+        private void trvLayersAndGroups_AfterSelect(object sender, TreeViewEventArgs e)
+        {
+            properties.SelectedObject = e.Node.Tag;
+        }
+    }
+}

Added: trunk/Tools/Maestro/RtMapInspector/MainForm.resx
===================================================================
--- trunk/Tools/Maestro/RtMapInspector/MainForm.resx	                        (rev 0)
+++ trunk/Tools/Maestro/RtMapInspector/MainForm.resx	2012-01-11 13:27:11 UTC (rev 6419)
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="imgList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="imgList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAE
+        DAAAAk1TRnQBSQFMAgEBBQEAAQgBAAEIAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
+        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
+        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
+        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
+        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
+        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
+        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
+        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
+        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
+        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
+        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
+        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
+        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
+        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
+        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
+        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
+        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
+        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
+        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
+        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
+        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
+        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
+        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
+        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
+        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
+        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAD/8xAAG8DQcBvDEA
+        AQcB9Qv0AfUBBzEAAe4B9AZzAngBHAKZAfQB7jEAAe4B9AFzARwBeAFzAngBmQEcAZ8BwwEIAfQB7jEA
+        AbwB9AFzARwBeAFzAXgCmQGYAZ8BGwEHAfQBvDEAAbwB9ANzA3gBmAKZAQgBuwH0AbwxAAG8AfUBcwN4
+        ApkBnwGZARsBGQG7AfUBvDEAAbwB9QFzA3gCmQGfAZkB8QHcAboB9QG8MQAB8AH1AXMBeAGZAXgBmQGf
+        AcMBCAEJAdwBugH1AfAxAAHwAfUDeAOZAQgCuwK6AfUB8DEAAfAB/wF4A5kBwwEbAfEBuwLcAboB/wHw
+        MQAB8AH/AXgDmQHDAcIBCQG6AdwB2wG6Af8B8DEAAfAB/wF4AZgCmQEIArsDugG0Af8B8DEAAfEN/wHx
+        MQAB8w3yAfMxAAH/AfQBHAp0ARwB9AL/AfQBHAp0ARwB9CP/AXQImgFSAZoBdAHyA/8BdAiaAVIBmgF0
+        AfIC/wHzDLwB8wL/AfMMvAHzAf8CAAGZAZoGegGaAXQBmgHaAZkBAAGTAW4ERQFLA3oBmgF0AZoB2gGZ
+        AgAB8QHwCvIB8AHxAgAB8QHwBvIBbgVFAZMCAAGZAZoGegGaAXQBmgHaAZkBAAFvBeMBRQN6AZoBdAGa
+        AdoBmQIAAfAM8gHwAgAB8AfyAUUF4wFvAgABmQiaAXQBmgHzAZkBAAGTAW8ERgFMBJoBdAGaAfMBmQIA
+        AfAM8gHwAgAB8AfyAW8ERgFFAZMCAAGZCJoBdAGaAfQBmQMAAZkImgF0AZoB9AGZAgAB8QzyAfECAAHx
+        DPIB8QMAAZkImgF0AZoB9QGZAwABmQiaAXQBmgH1AZkCAAHxAfML8gHxAgAB8QHzC/IB8QMAAZkImgJ5
+        Af8BmQMAAZkImgJ5Af8BmQIAAfEB8wvyAfECAAHxAfML8gHxAwABmQmaAXkBmQH0AwABmQmaAXkBmQH0
+        AgAB8QPzCfIB8QIAAfED8wnyAfEDAAGZCZoBoAGZBAABmQmaAaABmQMAAfIG8wfyAgAB8gbzB/IDAAEa
+        AaAImgGgARoEAAEaAaAImgGgARoDAAHyAfQK8wH0AfICAAHyAfQK8wH0AfIDAAEaAaAImgGgARoEAAEa
+        AaAImgGgARoDAAHyAfQK8wH0AfICAAHyAfQK8wH0AfIDAAEaCqABGgQAARoKoAEaAwAB8gH0CvMB9AHy
+        AgAB8gH0CvMB9AHyAwABGgqgARoEAAEaCqABGgMAAfMB8gr0AfIB8wIAAfMB8gr0AfIB8wMAARoBwwig
+        AcMBGgQAARoBwwigAcMBGgMAAf8B8wryAfMB/wIAAf8B8wryAfMB/wMAARsKGgEbBAABGwoaARsiAAFC
+        AU0BPgcAAT4DAAEoAwABQAMAASADAAEBAQABAQYAAQEWAAP/AgABAQcAAQEHAAEBBwABAQcAAQEHAAEB
+        BwABAQcAAQEHAAEBBwABAQcAAQEHAAEBBwABAQcAAQEHAAEBBwABARYAAcABAQEAAQEBgAEBAYABAAHA
+        AQEBAAEBAYABAQGAAQABwAEBAQABAQGAAQEBgAEAAcABAQHAAQEBgAEBAYABAQHAAQEBwAEBAYABAQGA
+        AQEBwAEBAcABAQGAAQEBgAEBAcABAQHAAQEBgAEBAYABAQHAAQMBwAEDAYABAQGAAQEBwAEDAcABAwGA
+        AQEBgAEBAcABAwHAAQMBgAEBAYABAQHAAQMBwAEDAYABAQGAAQEBwAEDAcABAwGAAQEBgAEBAcABAwHA
+        AQMBgAEBAYABAQHAAQMBwAEDBP8L
+</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/RtMapInspector/Program.cs
===================================================================
--- trunk/Tools/Maestro/RtMapInspector/Program.cs	                        (rev 0)
+++ trunk/Tools/Maestro/RtMapInspector/Program.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -0,0 +1,39 @@
+#region Disclaimer / License
+// Copyright (C) 2012, 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.Windows.Forms;
+
+namespace RtMapInspector
+{
+    static class Program
+    {
+        /// <summary>
+        /// The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new MainForm());
+        }
+    }
+}

Added: trunk/Tools/Maestro/RtMapInspector/Properties/AssemblyInfo.cs
===================================================================
--- trunk/Tools/Maestro/RtMapInspector/Properties/AssemblyInfo.cs	                        (rev 0)
+++ trunk/Tools/Maestro/RtMapInspector/Properties/AssemblyInfo.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -0,0 +1,20 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("RtMapInspector")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyProduct("RtMapInspector")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("cd28ed02-61bf-46cc-a986-4ff3b50b0aae")]

Added: trunk/Tools/Maestro/RtMapInspector/Properties/Resources.Designer.cs
===================================================================
--- trunk/Tools/Maestro/RtMapInspector/Properties/Resources.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/RtMapInspector/Properties/Resources.Designer.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -0,0 +1,81 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.5448
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace RtMapInspector.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("RtMapInspector.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Failed to open the Runtime Map.
+        /// </summary>
+        internal static string ErrFailedRuntimeMapOpen {
+            get {
+                return ResourceManager.GetString("ErrFailedRuntimeMapOpen", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to The selected connection is not compatible.
+        /// </summary>
+        internal static string ErrIncompatibleConnection {
+            get {
+                return ResourceManager.GetString("ErrIncompatibleConnection", resourceCulture);
+            }
+        }
+    }
+}

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

Added: trunk/Tools/Maestro/RtMapInspector/Properties/Settings.Designer.cs
===================================================================
--- trunk/Tools/Maestro/RtMapInspector/Properties/Settings.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/RtMapInspector/Properties/Settings.Designer.cs	2012-01-11 13:27:11 UTC (rev 6419)
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.5448
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace RtMapInspector.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/RtMapInspector/Properties/Settings.settings
===================================================================
--- trunk/Tools/Maestro/RtMapInspector/Properties/Settings.settings	                        (rev 0)
+++ trunk/Tools/Maestro/RtMapInspector/Properties/Settings.settings	2012-01-11 13:27:11 UTC (rev 6419)
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

Added: trunk/Tools/Maestro/RtMapInspector/RtMapInspector.csproj
===================================================================
--- trunk/Tools/Maestro/RtMapInspector/RtMapInspector.csproj	                        (rev 0)
+++ trunk/Tools/Maestro/RtMapInspector/RtMapInspector.csproj	2012-01-11 13:27:11 UTC (rev 6419)
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E204559D-EE92-4792-96E2-06F45654FAFC}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>RtMapInspector</RootNamespace>
+    <AssemblyName>RtMapInspector</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\out\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\out\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="..\Properties\GlobalAssemblyInfo.cs">
+      <Link>GlobalAssemblyInfo.cs</Link>
+    </Compile>
+    <Compile Include="MainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="MainForm.Designer.cs">
+      <DependentUpon>MainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="MainForm.resx">
+      <DependentUpon>MainForm.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Maestro.Login\Maestro.Login.csproj">
+      <Project>{07588440-5F9F-4C30-AA06-9CF30BA6DDE6}</Project>
+      <Name>Maestro.Login</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\OSGeo.MapGuide.MaestroAPI\OSGeo.MapGuide.MaestroAPI.csproj">
+      <Project>{80FA3158-8B5F-48D1-A393-0378AFE48A7E}</Project>
+      <Name>OSGeo.MapGuide.MaestroAPI</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file



More information about the mapguide-commits mailing list