[mapguide-commits] r8076 - in trunk/Tools/Maestro: . Maestro Maestro/packages MgCooker MpuCalc MpuCalc/Properties

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Sat Apr 26 13:27:28 PDT 2014


Author: jng
Date: 2014-04-26 13:27:28 -0700 (Sat, 26 Apr 2014)
New Revision: 8076

Added:
   trunk/Tools/Maestro/MpuCalc/
   trunk/Tools/Maestro/MpuCalc/App.config
   trunk/Tools/Maestro/MpuCalc/MpuCalc.csproj
   trunk/Tools/Maestro/MpuCalc/Program.cs
   trunk/Tools/Maestro/MpuCalc/Properties/
   trunk/Tools/Maestro/MpuCalc/Properties/AssemblyInfo.cs
   trunk/Tools/Maestro/MpuCalc/packages.config
Modified:
   trunk/Tools/Maestro/Maestro/Maestro_All.sln
   trunk/Tools/Maestro/Maestro/packages/repositories.config
   trunk/Tools/Maestro/MgCooker/MgCooker.csproj
   trunk/Tools/Maestro/MgCooker/SetupRun.cs
   trunk/Tools/Maestro/MgCooker/SetupRun.designer.cs
   trunk/Tools/Maestro/MgCooker/SetupRun.resx
   trunk/Tools/Maestro/MgCooker/Strings.Designer.cs
   trunk/Tools/Maestro/MgCooker/Strings.resx
Log:
#2359: Add ability to auto-calculate meters-per-unit required for the official method in MgCooker to work properly. We use the following methods depending on support:
 * The output of the new MpuCalc executable
 * The new CREATERUNTIMEMAP operation in 2.6

Modified: trunk/Tools/Maestro/Maestro/Maestro_All.sln
===================================================================
--- trunk/Tools/Maestro/Maestro/Maestro_All.sln	2014-04-26 18:58:29 UTC (rev 8075)
+++ trunk/Tools/Maestro/Maestro/Maestro_All.sln	2014-04-26 20:27:28 UTC (rev 8076)
@@ -158,6 +158,8 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OSGeo.MapGuide.ObjectModels.WebLayout-2.6.0", "..\ExtendedModels\WebLayout-2.6.0\OSGeo.MapGuide.ObjectModels.WebLayout-2.6.0.csproj", "{829D2A4E-7DBC-48AD-9CF9-12ACFBF943A6}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MpuCalc", "..\MpuCalc\MpuCalc.csproj", "{43B01C27-E0D2-439B-83ED-8C814ED1526A}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -352,6 +354,10 @@
 		{829D2A4E-7DBC-48AD-9CF9-12ACFBF943A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{829D2A4E-7DBC-48AD-9CF9-12ACFBF943A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{829D2A4E-7DBC-48AD-9CF9-12ACFBF943A6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{43B01C27-E0D2-439B-83ED-8C814ED1526A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{43B01C27-E0D2-439B-83ED-8C814ED1526A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{43B01C27-E0D2-439B-83ED-8C814ED1526A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{43B01C27-E0D2-439B-83ED-8C814ED1526A}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

Modified: trunk/Tools/Maestro/Maestro/packages/repositories.config
===================================================================
--- trunk/Tools/Maestro/Maestro/packages/repositories.config	2014-04-26 18:58:29 UTC (rev 8075)
+++ trunk/Tools/Maestro/Maestro/packages/repositories.config	2014-04-26 20:27:28 UTC (rev 8076)
@@ -9,6 +9,7 @@
   <repository path="..\..\Maestro.Shared.UI\packages.config" />
   <repository path="..\..\MaestroAPITestRunner\packages.config" />
   <repository path="..\..\MaestroAPITests\packages.config" />
+  <repository path="..\..\MpuCalc\packages.config" />
   <repository path="..\..\OSGeo.MapGuide.MaestroAPI.Local\packages.config" />
   <repository path="..\..\OSGeo.MapGuide.MaestroAPI\packages.config" />
   <repository path="..\packages.config" />

Modified: trunk/Tools/Maestro/MgCooker/MgCooker.csproj
===================================================================
--- trunk/Tools/Maestro/MgCooker/MgCooker.csproj	2014-04-26 18:58:29 UTC (rev 8075)
+++ trunk/Tools/Maestro/MgCooker/MgCooker.csproj	2014-04-26 20:27:28 UTC (rev 8076)
@@ -142,6 +142,10 @@
       <Project>{07588440-5f9f-4c30-aa06-9cf30ba6dde6}</Project>
       <Name>Maestro.Login</Name>
     </ProjectReference>
+    <ProjectReference Include="..\Maestro.Shared.UI\Maestro.Shared.UI.csproj">
+      <Project>{cfd19053-2172-41d3-8460-0fd2123a1e88}</Project>
+      <Name>Maestro.Shared.UI</Name>
+    </ProjectReference>
     <ProjectReference Include="..\OSGeo.MapGuide.ExtendedObjectModels\OSGeo.MapGuide.ExtendedObjectModels.csproj">
       <Project>{b3a2b816-9f41-4857-a111-09d2df2550d6}</Project>
       <Name>OSGeo.MapGuide.ExtendedObjectModels</Name>

Modified: trunk/Tools/Maestro/MgCooker/SetupRun.cs
===================================================================
--- trunk/Tools/Maestro/MgCooker/SetupRun.cs	2014-04-26 18:58:29 UTC (rev 8075)
+++ trunk/Tools/Maestro/MgCooker/SetupRun.cs	2014-04-26 20:27:28 UTC (rev 8076)
@@ -22,6 +22,7 @@
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
+using System.Linq;
 using System.Text;
 using System.Windows.Forms;
 using OSGeo.MapGuide.MaestroAPI;
@@ -31,6 +32,12 @@
 using System.Collections.Specialized;
 using OSGeo.MapGuide.MaestroAPI.Tile;
 using OSGeo.MapGuide.ObjectModels;
+using System.IO;
+using System.Reflection;
+using OSGeo.MapGuide.MaestroAPI.Services;
+using OSGeo.MapGuide.MaestroAPI.Commands;
+using System.Diagnostics;
+using Maestro.Shared.UI;
 
 namespace MgCooker
 {
@@ -331,10 +338,11 @@
         private List<Config> ReadTree()
         {
             List<Config> lst = new List<Config>();
-            foreach(TreeNode mn in MapTree.Nodes)
+            foreach (TreeNode mn in MapTree.Nodes)
+            {
                 if (mn.Checked)
                 {
-                    foreach(TreeNode gn in mn.Nodes)
+                    foreach (TreeNode gn in mn.Nodes)
                         if (gn.Checked)
                         {
                             List<int> ix = new List<int>();
@@ -346,6 +354,7 @@
                                 lst.Add(new Config(mn.Text, gn.Text, ix.ToArray(), (m_coordinateOverrides.ContainsKey(mn.Text) ? m_coordinateOverrides[mn.Text] : null)));
                         }
                 }
+            }
 
             return lst;
         }
@@ -536,16 +545,6 @@
             }
         }
 
-        private void label8_Click(object sender, EventArgs e)
-        {
-
-        }
-
-        private void numericUpDown5_ValueChanged(object sender, EventArgs e)
-        {
-
-        }
-
         private void LimitTileset_CheckedChanged(object sender, EventArgs e)
         {
             TilesetLimitPanel.Enabled = LimitTileset.Checked;
@@ -553,7 +552,7 @@
 
         private void UseOfficialMethod_CheckedChanged(object sender, EventArgs e)
         {
-            OfficialMethodPanel.Enabled = UseOfficialMethod.Checked;
+            OfficialMethodPanel.Enabled = lnkCalcMpu.Enabled = UseOfficialMethod.Checked;
             MapTree_AfterSelect(null, null);
         }
 
@@ -638,5 +637,89 @@
             if (double.TryParse(txtUpperY.Text, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.CurrentUICulture, out d))
                 m_coordinateOverrides[root.Text].MaxY = d;
         }
+
+        private void lnkCalcMpu_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+        {
+            var configs = ReadTree();
+            var mapDefs = configs.Select(x => x.MapDefinition).Distinct().ToArray();
+
+            if (mapDefs.Length == 0)
+            {
+                MessageBox.Show(Strings.NoMapSelected);
+            }
+            else if (mapDefs.Length == 1)
+            {
+                TryCalcMpu(mapDefs[0]);
+            }
+            else
+            {
+                MessageBox.Show(Strings.CannotCalculateMpuForMultipleMaps);
+            }
+        }
+
+        private void TryCalcMpu(string mapDef)
+        {
+            BusyWaitDialog.Run(Strings.CalculatingMpu, () => {
+                var currentPath = Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath);
+                var mpuCalc = Path.Combine(currentPath, "AddIns/Local/MpuCalc.exe");
+                if (!File.Exists(mpuCalc))
+                {
+                    int[] cmdTypes = m_connection.Capabilities.SupportedCommands;
+                    if (Array.IndexOf(cmdTypes, (int)OSGeo.MapGuide.MaestroAPI.Commands.CommandType.CreateRuntimeMap) < 0)
+                    {
+                        return Strings.NoMethodToCalculateMpu;
+                    }
+                    else
+                    {
+                        ICreateRuntimeMap create = (ICreateRuntimeMap)m_connection.CreateCommand((int)OSGeo.MapGuide.MaestroAPI.Commands.CommandType.CreateRuntimeMap);
+                        create.MapDefinition = mapDef;
+                        create.RequestedFeatures = (int)RuntimeMapRequestedFeatures.None;
+                        var info = create.Execute();
+                        return Convert.ToDecimal(info.CoordinateSystem.MetersPerUnit);
+                    }
+                }
+                else
+                {
+                    IMapDefinition mdf = (IMapDefinition)m_connection.ResourceService.GetResource(mapDef);
+                    var proc = new Process
+                    {
+                        StartInfo = new ProcessStartInfo
+                        {
+                            FileName = mpuCalc,
+                            Arguments = mdf.CoordinateSystem,
+                            UseShellExecute = false,
+                            RedirectStandardOutput = true,
+                            CreateNoWindow = true
+                        }
+                    };
+                    proc.Start();
+                    StringBuilder sb = new StringBuilder();
+                    while (!proc.StandardOutput.EndOfStream)
+                    {
+                        string line = proc.StandardOutput.ReadLine();
+                        // do something with line
+                        sb.AppendLine(line);
+                    }
+                    string output = sb.ToString();
+                    double mpu;
+                    if (double.TryParse(output, out mpu))
+                        return Convert.ToDecimal(mpu);
+                    else
+                        return string.Format(Strings.FailedToCalculateMpu, output);
+                }
+            }, (res, ex) => {
+                if (ex != null)
+                {
+                    ErrorDialog.Show(ex);
+                }
+                else
+                {
+                    if (res is decimal)
+                        MetersPerUnit.Value = (decimal)res;
+                    else
+                        MessageBox.Show(res.ToString());
+                }
+            });
+        }
     }
 }

Modified: trunk/Tools/Maestro/MgCooker/SetupRun.designer.cs
===================================================================
--- trunk/Tools/Maestro/MgCooker/SetupRun.designer.cs	2014-04-26 18:58:29 UTC (rev 8075)
+++ trunk/Tools/Maestro/MgCooker/SetupRun.designer.cs	2014-04-26 20:27:28 UTC (rev 8076)
@@ -74,6 +74,7 @@
             this.MaxColLimit = new System.Windows.Forms.NumericUpDown();
             this.label7 = new System.Windows.Forms.Label();
             this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+            this.lnkCalcMpu = new System.Windows.Forms.LinkLabel();
             this.panel1.SuspendLayout();
             this.panel2.SuspendLayout();
             this.BoundsOverride.SuspendLayout();
@@ -331,6 +332,7 @@
             // groupBox2
             // 
             resources.ApplyResources(this.groupBox2, "groupBox2");
+            this.groupBox2.Controls.Add(this.lnkCalcMpu);
             this.groupBox2.Controls.Add(this.OfficialMethodPanel);
             this.groupBox2.Controls.Add(this.LimitTileset);
             this.groupBox2.Controls.Add(this.UseOfficialMethod);
@@ -366,13 +368,11 @@
             0,
             0,
             0});
-            this.MetersPerUnit.ValueChanged += new System.EventHandler(this.numericUpDown5_ValueChanged);
             // 
             // label8
             // 
             resources.ApplyResources(this.label8, "label8");
             this.label8.Name = "label8";
-            this.label8.Click += new System.EventHandler(this.label8_Click);
             // 
             // LimitTileset
             // 
@@ -421,6 +421,13 @@
             resources.ApplyResources(this.label7, "label7");
             this.label7.Name = "label7";
             // 
+            // lnkCalcMpu
+            // 
+            resources.ApplyResources(this.lnkCalcMpu, "lnkCalcMpu");
+            this.lnkCalcMpu.Name = "lnkCalcMpu";
+            this.lnkCalcMpu.TabStop = true;
+            this.lnkCalcMpu.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkCalcMpu_LinkClicked);
+            // 
             // SetupRun
             // 
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
@@ -497,5 +504,6 @@
         private System.Windows.Forms.Label ModfiedOverrideWarning;
         private System.Windows.Forms.CheckBox chkUseDifferentConnection;
         private System.Windows.Forms.TextBox Username;
+        private System.Windows.Forms.LinkLabel lnkCalcMpu;
     }
 }
\ No newline at end of file

Modified: trunk/Tools/Maestro/MgCooker/SetupRun.resx
===================================================================
--- trunk/Tools/Maestro/MgCooker/SetupRun.resx	2014-04-26 18:58:29 UTC (rev 8075)
+++ trunk/Tools/Maestro/MgCooker/SetupRun.resx	2014-04-26 20:27:28 UTC (rev 8076)
@@ -117,18 +117,78 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <data name=">>button3.Name" xml:space="preserve">
+    <value>button3</value>
+  </data>
+  <data name=">>button3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>button3.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name=">>button3.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>button2.Name" xml:space="preserve">
+    <value>button2</value>
+  </data>
+  <data name=">>button2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>button2.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name=">>button2.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name=">>button1.Name" xml:space="preserve">
+    <value>button1</value>
+  </data>
+  <data name=">>button1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>button1.Parent" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name=">>button1.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
   <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Bottom</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 537</value>
+  </data>
+  <data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>565, 41</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="panel1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name=">>panel1.Name" xml:space="preserve">
+    <value>panel1</value>
+  </data>
+  <data name=">>panel1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>panel1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>panel1.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
   <data name="button3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Bottom</value>
   </data>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   <data name="button3.Location" type="System.Drawing.Point, System.Drawing">
     <value>227, 9</value>
   </data>
   <data name="button3.Size" type="System.Drawing.Size, System.Drawing">
     <value>112, 23</value>
   </data>
-  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   <data name="button3.TabIndex" type="System.Int32, mscorlib">
     <value>2</value>
   </data>
@@ -201,30 +261,6 @@
   <data name=">>button1.ZOrder" xml:space="preserve">
     <value>2</value>
   </data>
-  <data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
-    <value>Bottom</value>
-  </data>
-  <data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
-    <value>0, 537</value>
-  </data>
-  <data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
-    <value>565, 41</value>
-  </data>
-  <data name="panel1.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
-  </data>
-  <data name=">>panel1.Name" xml:space="preserve">
-    <value>panel1</value>
-  </data>
-  <data name=">>panel1.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>panel1.Parent" xml:space="preserve">
-    <value>$this</value>
-  </data>
-  <data name=">>panel1.ZOrder" xml:space="preserve">
-    <value>2</value>
-  </data>
   <data name="MapTree.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
     <value>Fill</value>
   </data>
@@ -239,54 +275,54 @@
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAB6
-        DAAAAk1TRnQBSQFMAgEBBAEAAWQBAAFkAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
+        DAAAAk1TRnQBSQFMAgEBBAEAAWwBAAFsAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
         AwABIAMAAQEBAAEgBgABIP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AKgADHAEoAyQBNgMk
         ATYDJAE2AyQBNgMkATYDJAE2AyQBNgMkATYDJAE2AyQBNgMkATYDGwEmHAADFgEeAVsCWAHGAx0BKgMC
-        AQOgAAP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wMbASYcAAGE
-        Am0B9wH0AeYB4QH/AcEBuAG3Af0BigGCAYEB+QFNAkwBkQMRAReYAAP9Af8B9QHoAeQB/wH0AeUB4AH/
+        AQOgAAP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wP9Af8D/QH/A/0B/wMbASYcAAGD
+        Am0B9wH0AeYB4QH/Ab4BtwG2Af0BiQGBAYAB+QFNAkwBkQMRAReYAAP9Af8B9QHoAeQB/wH0AeUB4AH/
         AfIB4gHdAf8B8QHgAdkB/wHwAd0B1gH/Ae8B2wHTAf8B7gHZAdEB/wHuAdgB0AH/Ae4B2AHQAf8B7gHY
         AdAB/wP9Af8DGwEmGAABLAIrAUMB9QHoAeMB/wH0AeYB4QH/AfMB5AHfAf8B8gHjAd0B/wHyAeEB2wH/
-        AaIBkwGPAfoBZgJaAfABNgI1AVgDCwEPDAADHQEqAx0BKiAAAwUBBwMdASoDHQEqTAAD/QH/AfcB7QHp
-        Af8B9gHqAeYB/wH0AecB4wH/Ad0BtQGwAf8BvQFoAWMB/wG+AWwBZwH/AeMBwgG8Af8B7wHaAdIB/wHu
-        AdgB0AH/Ae4B2AHQAf8D/QH/AxsBJhgAAYgCeAH4AfUB6AHjAf8B9AHmAeEB/wHzAeQB3wH/AfIB4wHd
-        Af8B8gHhAdsB/wHxAd8B2QH/AfAB3QHXAf8B7wHcAdUB/wGYAYABfQH6AVkCVwHCCwAB/ygAAzABTAMA
-        Af9MAAP9Af8B+AHwAe0B/wHtAdcB0gH/AbkBiQFmAf8BVgGTASYB/wHqAbEBLgH/AegBrgElAf8B6wHB
-        AVkB/wGxAVABSwH/Ae4B2QHSAf8B7gHZAdIB/wP9Af8DGwEmFAADQAFwAfUB6QHlAf8B9QHoAeMB/wH0
+        AaABkAGMAfoBZQJaAfABNgI1AVgDCwEPDAADHQEqAx0BKiAAAwUBBwMdASoDHQEqTAAD/QH/AfcB7QHp
+        Af8B9gHqAeYB/wH0AecB4wH/Ad0BtQGwAf8BvQFnAWIB/wG+AWsBZgH/AeMBwgG8Af8B7wHaAdIB/wHu
+        AdgB0AH/Ae4B2AHQAf8D/QH/AxsBJhgAAYUCdwH4AfUB6AHjAf8B9AHmAeEB/wHzAeQB3wH/AfIB4wHd
+        Af8B8gHhAdsB/wHxAd8B2QH/AfAB3QHXAf8B7wHcAdUB/wGVAX4BfAH6AVkCVwHCCwAB/ygAAzABTAMA
+        Af9MAAP9Af8B+AHwAe0B/wHtAdcB0gH/AbkBiQFlAf8BVQGTASUB/wHqAbEBLQH/AegBrgEkAf8B6wHB
+        AVgB/wGxAU8BSgH/Ae4B2QHSAf8B7gHZAdIB/wP9Af8DGwEmFAADQAFwAfUB6QHlAf8B9QHoAeMB/wH0
         AeYB4QH/AfMB5AHfAf8B8gHjAd0B/wHyAeEB2wH/AfEB3wHZAf8B8AHdAdcB/wHvAdwB1QH/Ae8B2gHT
         Af8DOAFcCwAB/wgAAUYCRQF/AwAEAQECA0UBfQQAAygBPAMlATcEAAMvAUoDAAH/DAADEQEXA1gB0QMA
-        Af8DKAE8EAADOAFcAwAB/xgAA/0B/wH2AeoB5gH/AegBvwGcAf8B+wHLAVkB/wEzAa0BQAH/AUsBnQEh
-        Af8B/gHEATkB/wH+Ab4BJAH/AfYBtgEaAf8BlwFpAUYB/wHwAd0B1gH/A/0B/wMbASYUAAGSAn4B+AH1
+        Af8DKAE8EAADOAFcAwAB/xgAA/0B/wH2AeoB5gH/AegBvwGcAf8B+wHLAVgB/wEyAa0BPwH/AUoBnQEg
+        Af8B/gHEATgB/wH+Ab4BIwH/AfYBtgEZAf8BlwFoAUUB/wHwAd0B1gH/A/0B/wMbASYUAAGQAn0B+AH1
         AekB5QH/AfUB6AHjAf8B9AHmAeEB/wHzAeQB3wH/AfIB4wHdAf8B8gHhAdsB/wHxAd8B2QH/AfAB3QHX
-        Af8B7wHcAdUB/wFzAmIB9gMEAQYLAAH/CwAB/wNFAX0DSAGFAwAB/wcAAf8DAAH/BAADLwFKAwAB/xAA
-        A0IBdAMAAf8UAAMNAREDWgHVGAAD/QH/AbkBVgFBAf8B+gHOAWUB/wGkAbYBTQH/ATMBrQFBAf8BMgGt
-        AUAB/wHJAb8BTwH/Af4BxAE4Af8B/gHAASkB/wExAaUBOAH/AbwBaAFlAf8D/QH/AxsBJhAAA1ABngH2
+        Af8B7wHcAdUB/wFxAmIB9gMEAQYLAAH/CwAB/wNFAX0DSAGFAwAB/wcAAf8DAAH/BAADLwFKAwAB/xAA
+        A0IBdAMAAf8UAAMNAREDWgHVGAAD/QH/AbkBVQFAAf8B+gHOAWQB/wGkAbYBTAH/ATIBrQFAAf8BMQGt
+        AT8B/wHJAb8BTgH/Af4BxAE3Af8B/gHAASgB/wEwAaUBNwH/AbwBZwFkAf8D/QH/AxsBJhAAA1ABngH2
         AesB5wH/AfUB6QHlAf8B9QHoAeMB/wH0AeYB4QH/AfMB5AHfAf8B8gHjAd0B/wHyAeEB2wH/AfEB3wHZ
-        Af8B8AHdAdcB/wG3Aa0BqQH8AygBPA8AAf8oAAMvAUoDAAH/EAADQgF0AwAB/zQAA/0B/wHqAcMBoQH/
-        Af0B1gGEAf8BmwG2AVMB/wExAZ8BJgH/AfEB2AGRAf8B/QHRAWkB/wGcAbABOgH/ATMBrQFBAf8BMwGt
-        AUEB/wGYAWQBQwH/A/0B/wMbASYQAAGPAYYBhQH3AfYB6wHnAf8B9QHpAeUB/wH1AegB4wH/AfQB5gHh
-        Af8B8wHkAd8B/wHyAeMB3QH/AfIB4QHbAf8B8QHfAdkB/wHwAd0B1wH/AWYCWQHrAwEBAg8AAf8oAAMv
-        AUoDAAH/EAADQgF0AwAB/xQAAwIBAwNRAaEYAAP9Af8B+gHiAbkB/wE0AZoBHQH/AtQBmwH/Af0B4wG1
-        Af8B/QHdAZ0B/wH9AdQBcgH/AeQByAFXAf8BMgGsAT8B/wFJAZwBHgH/AZ4BigFUAf8D/QH/AxsBJgwA
+        Af8B8AHdAdcB/wG1AasBpgH8AygBPA8AAf8oAAMvAUoDAAH/EAADQgF0AwAB/zQAA/0B/wHqAcMBoQH/
+        Af0B1gGEAf8BmwG2AVIB/wEwAZ8BJQH/AfEB2AGRAf8B/QHRAWgB/wGcAbABOQH/ATIBrQFAAf8BMgGt
+        AUAB/wGYAWMBQgH/A/0B/wMbASYQAAGNAYUBhAH3AfYB6wHnAf8B9QHpAeUB/wH1AegB4wH/AfQB5gHh
+        Af8B8wHkAd8B/wHyAeMB3QH/AfIB4QHbAf8B8QHfAdkB/wHwAd0B1wH/AWQCWQHrAwEBAg8AAf8oAAMv
+        AUoDAAH/EAADQgF0AwAB/xQAAwIBAwNRAaEYAAP9Af8B+gHiAbkB/wEzAZoBHAH/AtQBmwH/Af0B4wG1
+        Af8B/QHdAZ0B/wH9AdQBcQH/AeQByAFWAf8BMQGsAT4B/wFIAZwBHQH/AZ4BigFTAf8D/QH/AxsBJgwA
         AVwCWQHJAfcB7QHpAf8B9gHrAecB/wH1AekB5QH/AfUB6AHjAf8B9AHmAeEB/wHzAeQB3wH/AfIB4wHd
-        Af8B8gHhAdsB/wHxAd8B2QH/AaQBlgGSAfoDGwEmEwAB/ygAAy8BSgMAAf8QAANCAXQDAAH/FAADPgFr
-        AwAB/xgAA/0B/wFmAZABLgH/ATMBrQFBAf8BMwGtAUEB/wGvAcEBbQH/Af0B2wGVAf8B/QHTAW0B/wH+
-        AcoBSwH/ATsBmgEdAf8BMQGXARgB/wGcAWYBRAH/A/0B/wMbASYIAAMEAQUBpgGcAZsB+gH3Ae0B6QH/
+        Af8B8gHhAdsB/wHxAd8B2QH/AaIBkwGPAfoDGwEmEwAB/ygAAy8BSgMAAf8QAANCAXQDAAH/FAADPgFr
+        AwAB/xgAA/0B/wFlAZABLQH/ATIBrQFAAf8BMgGtAUAB/wGvAcEBbAH/Af0B2wGVAf8B/QHTAWwB/wH+
+        AcoBSgH/AToBmgEcAf8BMAGXARcB/wGcAWUBQwH/A/0B/wMbASYIAAMEAQUBpAGaAZkB+gH3Ae0B6QH/
         AfYB6wHnAf8B9QHpAeUB/wH1AegB4wH/AfQB5gHhAf8B8wHkAd8B/wHyAeMB3QH/AfIB4QHbAf8B8QHf
-        AdkB/wFdAlkB0hcAAf8oAAMvAUoDAAH/EAADQgF2AwAB/zQAA/0B/wG+AWgBSAH/ATMBrQFBAf8BMgGj
-        AS8B/wEyAa0BQAH/AcABwgFgAf8B/gHOAVsB/wH+AcYBPQH/AVIBlAEPAf8BwgG6AT8B/wHFAYEBcQH/
+        AdkB/wFdAlkB0hcAAf8oAAMvAUoDAAH/EAADQgF2AwAB/zQAA/0B/wG+AWcBRwH/ATIBrQFAAf8BMQGj
+        AS4B/wExAa0BPwH/AcABwgFfAf8B/gHOAVoB/wH+AcYBPAH/AVEBlAEOAf8BwgG6AT4B/wHFAYEBcAH/
         A/0B/wMbASYIAAFkAlwB5wH4Ae4B6wH/AfcB7QHpAf8B9gHrAecB/wH1AekB5QH/AfUB6AHjAf8B9AHm
-        AeEB/wHzAeQB3wH/AfIB4wHdAf8B8gHhAdsB/wGVAYQBgQH4AxMBGhcAAf8oAAMvAUoDAAH/DAADCAEL
-        A1oB3gMAAf80AAP9Af8B9wHtAekB/wFuAZABMgH/AacBtQFHAf8BMwGTAREB/wGqAbcBSQH/AUYBngEi
-        Af8B8gHCAToB/wH+Ab0BHwH/AcUBcQFdAf8B+QHxAe4B/wP9Af8DGwEmBAADEgEZAacCngH6AfgB7gHr
+        AeEB/wHzAeQB3wH/AfIB4wHdAf8B8gHhAdsB/wGTAYEBfgH4AxMBGhcAAf8oAAMvAUoDAAH/DAADCAEL
+        A1oB3gMAAf80AAP9Af8B9wHtAekB/wFtAZABMQH/AacBtQFGAf8BMgGTARAB/wGqAbcBSAH/AUUBngEh
+        Af8B8gHCATkB/wH+Ab0BHgH/AcUBcAFcAf8B+QHxAe4B/wP9Af8DGwEmBAADEgEZAaUCnAH6AfgB7gHr
         Af8B9wHtAekB/wH2AesB5wH/AfUB6QHlAf8B9QHoAeMB/wH0AeYB4QH/AfMB5AHfAf8B8gHjAd0B/wHy
         AeEB2wH/A1QBrxgAA1cB3wFJAkgBhyAAAwsBDwNVAbcDVwHfTAAD/QH/AfkB8QHuAf8B8gHhAdsB/wGt
-        AYYBTgH/Ae4B2AGLAf8BRwGeASIB/wEyAa0BQAH/ATgBlAEUAf8BuwFbAUcB/wH4AfAB7QH/AfkB8QHu
-        Af8D/QH/AxsBJggAAwEBAgFSAlEBpwGOAocB+QH2AesB5wH/AfUB6QHlAf8B9QHoAeMB/wH0AeYB4QH/
-        AfMB5AHfAf8B8gHjAd0B/wGSAX0BewH4Aw4BE5gAA/0B/wH5AfEB7gH/AfkB8QHuAf8B+QHxAe4B/wHs
+        AYYBTQH/Ae4B2AGLAf8BRgGeASEB/wExAa0BPwH/ATcBlAETAf8BuwFaAUYB/wH4AfAB7QH/AfkB8QHu
+        Af8D/QH/AxsBJggAAwEBAgFSAlEBpwGNAoYB+QH2AesB5wH/AfUB6QHlAf8B9QHoAeMB/wH0AeYB4QH/
+        AfMB5AHfAf8B8gHjAd0B/wGQAXwBegH4Aw4BE5gAA/0B/wH5AfEB7gH/AfkB8QHuAf8B+QHxAe4B/wHs
         AdIByQH/AdIBlQGCAf8B1AGaAYkB/wHyAeEB3AH/AfkB8QHuAf8B+QHxAe4B/wH5AfEB7gH/A/0B/wMb
-        ASYUAAMdASkBYQJaAeQBlgGLAYoB+QH0AeYB4QH/AfMB5AHfAf8B8gHjAd0B/wFJAkgBiJwAA/0B/wH6
+        ASYUAAMdASkBYQJaAeQBkgGKAYkB+QH0AeYB4QH/AfMB5AHfAf8B8gHjAd0B/wFJAkgBiJwAA/0B/wH6
         AfYB9AH/AfoB9gH0Af8B+gH2AfQB/wH6AfYB9AH/AfoB9gH0Af8B+gH2AfQB/wH6AfYB9AH/AfoB9gH0
-        Af8B+gH2AfQB/wH6AfYB9AH/A/0B/wMbASYgAAM+AWsBigJ4AfoBiAJ3AfgDBwEKnAABpQKgAf8BpAGg
+        Af8B+gH2AfQB/wH6AfYB9AH/A/0B/wMbASYgAAM+AWsBhwJ3AfoBhQJ2AfgDBwEKnAABpQKgAf8BpAGg
         AZ8B/wGkAp8B/wGjAp4B/wGiAp0B/wGhApwB/wGgApsB/wGfApoB/wGdApkB/wGcAZgBlwH/AZsClgH/
         AZkClQH/yAABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/4EAAcABAQH8AT8E/wHA
         AQEB/AEPBP8BwAEBAfgBAQHPAfEC/wHAAQEB+AEAAd8B+QL/AcABAQHwAQAB2AFJAcMBzwHAAQEB8AEA
@@ -328,6 +364,597 @@
   <data name="BoundsOverride.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Left, Right</value>
   </data>
+  <data name=">>ModfiedOverrideWarning.Name" xml:space="preserve">
+    <value>ModfiedOverrideWarning</value>
+  </data>
+  <data name=">>ModfiedOverrideWarning.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>ModfiedOverrideWarning.Parent" xml:space="preserve">
+    <value>BoundsOverride</value>
+  </data>
+  <data name=">>ModfiedOverrideWarning.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>ResetBounds.Name" xml:space="preserve">
+    <value>ResetBounds</value>
+  </data>
+  <data name=">>ResetBounds.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>ResetBounds.Parent" xml:space="preserve">
+    <value>BoundsOverride</value>
+  </data>
+  <data name=">>ResetBounds.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name=">>txtUpperY.Name" xml:space="preserve">
+    <value>txtUpperY</value>
+  </data>
+  <data name=">>txtUpperY.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>txtUpperY.Parent" xml:space="preserve">
+    <value>BoundsOverride</value>
+  </data>
+  <data name=">>txtUpperY.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name=">>label4.Name" xml:space="preserve">
+    <value>label4</value>
+  </data>
+  <data name=">>label4.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label4.Parent" xml:space="preserve">
+    <value>BoundsOverride</value>
+  </data>
+  <data name=">>label4.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name=">>txtUpperX.Name" xml:space="preserve">
+    <value>txtUpperX</value>
+  </data>
+  <data name=">>txtUpperX.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>txtUpperX.Parent" xml:space="preserve">
+    <value>BoundsOverride</value>
+  </data>
+  <data name=">>txtUpperX.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name=">>label5.Name" xml:space="preserve">
+    <value>label5</value>
+  </data>
+  <data name=">>label5.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label5.Parent" xml:space="preserve">
+    <value>BoundsOverride</value>
+  </data>
+  <data name=">>label5.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name=">>txtLowerY.Name" xml:space="preserve">
+    <value>txtLowerY</value>
+  </data>
+  <data name=">>txtLowerY.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>txtLowerY.Parent" xml:space="preserve">
+    <value>BoundsOverride</value>
+  </data>
+  <data name=">>txtLowerY.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name=">>label10.Name" xml:space="preserve">
+    <value>label10</value>
+  </data>
+  <data name=">>label10.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label10.Parent" xml:space="preserve">
+    <value>BoundsOverride</value>
+  </data>
+  <data name=">>label10.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name=">>txtLowerX.Name" xml:space="preserve">
+    <value>txtLowerX</value>
+  </data>
+  <data name=">>txtLowerX.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>txtLowerX.Parent" xml:space="preserve">
+    <value>BoundsOverride</value>
+  </data>
+  <data name=">>txtLowerX.ZOrder" xml:space="preserve">
+    <value>8</value>
+  </data>
+  <data name=">>label11.Name" xml:space="preserve">
+    <value>label11</value>
+  </data>
+  <data name=">>label11.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label11.Parent" xml:space="preserve">
+    <value>BoundsOverride</value>
+  </data>
+  <data name=">>label11.ZOrder" xml:space="preserve">
+    <value>9</value>
+  </data>
+  <data name="BoundsOverride.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="BoundsOverride.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 424</value>
+  </data>
+  <data name="BoundsOverride.Size" type="System.Drawing.Size, System.Drawing">
+    <value>248, 120</value>
+  </data>
+  <data name="BoundsOverride.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name="BoundsOverride.Text" xml:space="preserve">
+    <value>Override bounds</value>
+  </data>
+  <data name=">>BoundsOverride.Name" xml:space="preserve">
+    <value>BoundsOverride</value>
+  </data>
+  <data name=">>BoundsOverride.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>BoundsOverride.Parent" xml:space="preserve">
+    <value>panel2</value>
+  </data>
+  <data name=">>BoundsOverride.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="grpDifferentConnection.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name=">>chkUseDifferentConnection.Name" xml:space="preserve">
+    <value>chkUseDifferentConnection</value>
+  </data>
+  <data name=">>chkUseDifferentConnection.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>chkUseDifferentConnection.Parent" xml:space="preserve">
+    <value>grpDifferentConnection</value>
+  </data>
+  <data name=">>chkUseDifferentConnection.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>UseNativeAPI.Name" xml:space="preserve">
+    <value>UseNativeAPI</value>
+  </data>
+  <data name=">>UseNativeAPI.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>UseNativeAPI.Parent" xml:space="preserve">
+    <value>grpDifferentConnection</value>
+  </data>
+  <data name=">>UseNativeAPI.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name=">>Password.Name" xml:space="preserve">
+    <value>Password</value>
+  </data>
+  <data name=">>Password.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>Password.Parent" xml:space="preserve">
+    <value>grpDifferentConnection</value>
+  </data>
+  <data name=">>Password.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name=">>Username.Name" xml:space="preserve">
+    <value>Username</value>
+  </data>
+  <data name=">>Username.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>Username.Parent" xml:space="preserve">
+    <value>grpDifferentConnection</value>
+  </data>
+  <data name=">>Username.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name=">>MapAgent.Name" xml:space="preserve">
+    <value>MapAgent</value>
+  </data>
+  <data name=">>MapAgent.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>MapAgent.Parent" xml:space="preserve">
+    <value>grpDifferentConnection</value>
+  </data>
+  <data name=">>MapAgent.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name=">>label3.Name" xml:space="preserve">
+    <value>label3</value>
+  </data>
+  <data name=">>label3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label3.Parent" xml:space="preserve">
+    <value>grpDifferentConnection</value>
+  </data>
+  <data name=">>label3.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name=">>label2.Name" xml:space="preserve">
+    <value>label2</value>
+  </data>
+  <data name=">>label2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label2.Parent" xml:space="preserve">
+    <value>grpDifferentConnection</value>
+  </data>
+  <data name=">>label2.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name=">>label1.Name" xml:space="preserve">
+    <value>label1</value>
+  </data>
+  <data name=">>label1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label1.Parent" xml:space="preserve">
+    <value>grpDifferentConnection</value>
+  </data>
+  <data name=">>label1.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="grpDifferentConnection.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 8</value>
+  </data>
+  <data name="grpDifferentConnection.Size" type="System.Drawing.Size, System.Drawing">
+    <value>248, 128</value>
+  </data>
+  <data name="grpDifferentConnection.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name=">>grpDifferentConnection.Name" xml:space="preserve">
+    <value>grpDifferentConnection</value>
+  </data>
+  <data name=">>grpDifferentConnection.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>grpDifferentConnection.Parent" xml:space="preserve">
+    <value>panel2</value>
+  </data>
+  <data name=">>grpDifferentConnection.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="groupBox3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name=">>RandomTileOrder.Name" xml:space="preserve">
+    <value>RandomTileOrder</value>
+  </data>
+  <data name=">>RandomTileOrder.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>RandomTileOrder.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name=">>RandomTileOrder.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>ThreadCount.Name" xml:space="preserve">
+    <value>ThreadCount</value>
+  </data>
+  <data name=">>ThreadCount.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>ThreadCount.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name=">>ThreadCount.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name=">>label9.Name" xml:space="preserve">
+    <value>label9</value>
+  </data>
+  <data name=">>label9.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label9.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name=">>label9.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="groupBox3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 328</value>
+  </data>
+  <data name="groupBox3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>248, 80</value>
+  </data>
+  <data name="groupBox3.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="groupBox3.Text" xml:space="preserve">
+    <value>Threading</value>
+  </data>
+  <data name=">>groupBox3.Name" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name=">>groupBox3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>groupBox3.Parent" xml:space="preserve">
+    <value>panel2</value>
+  </data>
+  <data name=">>groupBox3.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="groupBox2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="lnkCalcMpu.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="lnkCalcMpu.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="lnkCalcMpu.Location" type="System.Drawing.Point, System.Drawing">
+    <value>141, 105</value>
+  </data>
+  <data name="lnkCalcMpu.Size" type="System.Drawing.Size, System.Drawing">
+    <value>51, 13</value>
+  </data>
+  <data name="lnkCalcMpu.TabIndex" type="System.Int32, mscorlib">
+    <value>14</value>
+  </data>
+  <data name="lnkCalcMpu.Text" xml:space="preserve">
+    <value>Calculate</value>
+  </data>
+  <data name=">>lnkCalcMpu.Name" xml:space="preserve">
+    <value>lnkCalcMpu</value>
+  </data>
+  <data name=">>lnkCalcMpu.Type" xml:space="preserve">
+    <value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>lnkCalcMpu.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name=">>lnkCalcMpu.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>MetersPerUnit.Name" xml:space="preserve">
+    <value>MetersPerUnit</value>
+  </data>
+  <data name=">>MetersPerUnit.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>MetersPerUnit.Parent" xml:space="preserve">
+    <value>OfficialMethodPanel</value>
+  </data>
+  <data name=">>MetersPerUnit.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>label8.Name" xml:space="preserve">
+    <value>label8</value>
+  </data>
+  <data name=">>label8.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label8.Parent" xml:space="preserve">
+    <value>OfficialMethodPanel</value>
+  </data>
+  <data name=">>label8.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="OfficialMethodPanel.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="OfficialMethodPanel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>24, 128</value>
+  </data>
+  <data name="OfficialMethodPanel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>216, 24</value>
+  </data>
+  <data name="OfficialMethodPanel.TabIndex" type="System.Int32, mscorlib">
+    <value>13</value>
+  </data>
+  <data name=">>OfficialMethodPanel.Name" xml:space="preserve">
+    <value>OfficialMethodPanel</value>
+  </data>
+  <data name=">>OfficialMethodPanel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>OfficialMethodPanel.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name=">>OfficialMethodPanel.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="LimitTileset.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="LimitTileset.Location" type="System.Drawing.Point, System.Drawing">
+    <value>24, 24</value>
+  </data>
+  <data name="LimitTileset.Size" type="System.Drawing.Size, System.Drawing">
+    <value>118, 17</value>
+  </data>
+  <data name="LimitTileset.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name="LimitTileset.Text" xml:space="preserve">
+    <value>Limit number of tiles</value>
+  </data>
+  <data name="LimitTileset.ToolTip" xml:space="preserve">
+    <value>Set a limit on the number of tiles generated, note that this may prevent all tiles from being created</value>
+  </data>
+  <data name=">>LimitTileset.Name" xml:space="preserve">
+    <value>LimitTileset</value>
+  </data>
+  <data name=">>LimitTileset.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>LimitTileset.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name=">>LimitTileset.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="UseOfficialMethod.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="UseOfficialMethod.Location" type="System.Drawing.Point, System.Drawing">
+    <value>24, 104</value>
+  </data>
+  <data name="UseOfficialMethod.Size" type="System.Drawing.Size, System.Drawing">
+    <value>116, 17</value>
+  </data>
+  <data name="UseOfficialMethod.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
+  </data>
+  <data name="UseOfficialMethod.Text" xml:space="preserve">
+    <value>Use official method</value>
+  </data>
+  <data name="UseOfficialMethod.ToolTip" xml:space="preserve">
+    <value>The official method is the most accurate, but requires that the meters per map unit is entered</value>
+  </data>
+  <data name=">>UseOfficialMethod.Name" xml:space="preserve">
+    <value>UseOfficialMethod</value>
+  </data>
+  <data name=">>UseOfficialMethod.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>UseOfficialMethod.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name=">>UseOfficialMethod.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name=">>MaxRowLimit.Name" xml:space="preserve">
+    <value>MaxRowLimit</value>
+  </data>
+  <data name=">>MaxRowLimit.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>MaxRowLimit.Parent" xml:space="preserve">
+    <value>TilesetLimitPanel</value>
+  </data>
+  <data name=">>MaxRowLimit.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name=">>label6.Name" xml:space="preserve">
+    <value>label6</value>
+  </data>
+  <data name=">>label6.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label6.Parent" xml:space="preserve">
+    <value>TilesetLimitPanel</value>
+  </data>
+  <data name=">>label6.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name=">>MaxColLimit.Name" xml:space="preserve">
+    <value>MaxColLimit</value>
+  </data>
+  <data name=">>MaxColLimit.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>MaxColLimit.Parent" xml:space="preserve">
+    <value>TilesetLimitPanel</value>
+  </data>
+  <data name=">>MaxColLimit.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name=">>label7.Name" xml:space="preserve">
+    <value>label7</value>
+  </data>
+  <data name=">>label7.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label7.Parent" xml:space="preserve">
+    <value>TilesetLimitPanel</value>
+  </data>
+  <data name=">>label7.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="TilesetLimitPanel.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="TilesetLimitPanel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>24, 48</value>
+  </data>
+  <data name="TilesetLimitPanel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>216, 48</value>
+  </data>
+  <data name="TilesetLimitPanel.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name=">>TilesetLimitPanel.Name" xml:space="preserve">
+    <value>TilesetLimitPanel</value>
+  </data>
+  <data name=">>TilesetLimitPanel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>TilesetLimitPanel.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name=">>TilesetLimitPanel.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 144</value>
+  </data>
+  <data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>248, 168</value>
+  </data>
+  <data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="groupBox2.Text" xml:space="preserve">
+    <value>Tilesettings</value>
+  </data>
+  <data name=">>groupBox2.Name" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name=">>groupBox2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>groupBox2.Parent" xml:space="preserve">
+    <value>panel2</value>
+  </data>
+  <data name=">>groupBox2.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Right</value>
+  </data>
+  <data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>293, 0</value>
+  </data>
+  <data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>272, 537</value>
+  </data>
+  <data name="panel2.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name=">>panel2.Name" xml:space="preserve">
+    <value>panel2</value>
+  </data>
+  <data name=">>panel2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>panel2.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name=">>panel2.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
   <data name="ModfiedOverrideWarning.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -562,36 +1189,6 @@
   <data name=">>label11.ZOrder" xml:space="preserve">
     <value>9</value>
   </data>
-  <data name="BoundsOverride.Enabled" type="System.Boolean, mscorlib">
-    <value>False</value>
-  </data>
-  <data name="BoundsOverride.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 424</value>
-  </data>
-  <data name="BoundsOverride.Size" type="System.Drawing.Size, System.Drawing">
-    <value>248, 120</value>
-  </data>
-  <data name="BoundsOverride.TabIndex" type="System.Int32, mscorlib">
-    <value>12</value>
-  </data>
-  <data name="BoundsOverride.Text" xml:space="preserve">
-    <value>Override bounds</value>
-  </data>
-  <data name=">>BoundsOverride.Name" xml:space="preserve">
-    <value>BoundsOverride</value>
-  </data>
-  <data name=">>BoundsOverride.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>BoundsOverride.Parent" xml:space="preserve">
-    <value>panel2</value>
-  </data>
-  <data name=">>BoundsOverride.ZOrder" xml:space="preserve">
-    <value>0</value>
-  </data>
-  <data name="grpDifferentConnection.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Left, Right</value>
-  </data>
   <data name="chkUseDifferentConnection.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -619,6 +1216,9 @@
   <data name=">>chkUseDifferentConnection.ZOrder" xml:space="preserve">
     <value>0</value>
   </data>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>250, 17</value>
+  </metadata>
   <data name="UseNativeAPI.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -634,9 +1234,6 @@
   <data name="UseNativeAPI.Text" xml:space="preserve">
     <value>Connect using native API</value>
   </data>
-  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>250, 17</value>
-  </metadata>
   <data name="UseNativeAPI.ToolTip" xml:space="preserve">
     <value>Using the Native API is potentially faster, but requires binary files, open ports and a webconfig.ini file</value>
   </data>
@@ -805,30 +1402,6 @@
   <data name=">>label1.ZOrder" xml:space="preserve">
     <value>7</value>
   </data>
-  <data name="grpDifferentConnection.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 8</value>
-  </data>
-  <data name="grpDifferentConnection.Size" type="System.Drawing.Size, System.Drawing">
-    <value>248, 128</value>
-  </data>
-  <data name="grpDifferentConnection.TabIndex" type="System.Int32, mscorlib">
-    <value>5</value>
-  </data>
-  <data name=">>grpDifferentConnection.Name" xml:space="preserve">
-    <value>grpDifferentConnection</value>
-  </data>
-  <data name=">>grpDifferentConnection.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>grpDifferentConnection.Parent" xml:space="preserve">
-    <value>panel2</value>
-  </data>
-  <data name=">>grpDifferentConnection.ZOrder" xml:space="preserve">
-    <value>1</value>
-  </data>
-  <data name="groupBox3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Left, Right</value>
-  </data>
   <data name="RandomTileOrder.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -910,33 +1483,6 @@
   <data name=">>label9.ZOrder" xml:space="preserve">
     <value>2</value>
   </data>
-  <data name="groupBox3.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 328</value>
-  </data>
-  <data name="groupBox3.Size" type="System.Drawing.Size, System.Drawing">
-    <value>248, 80</value>
-  </data>
-  <data name="groupBox3.TabIndex" type="System.Int32, mscorlib">
-    <value>7</value>
-  </data>
-  <data name="groupBox3.Text" xml:space="preserve">
-    <value>Threading</value>
-  </data>
-  <data name=">>groupBox3.Name" xml:space="preserve">
-    <value>groupBox3</value>
-  </data>
-  <data name=">>groupBox3.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>groupBox3.Parent" xml:space="preserve">
-    <value>panel2</value>
-  </data>
-  <data name=">>groupBox3.ZOrder" xml:space="preserve">
-    <value>2</value>
-  </data>
-  <data name="groupBox2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Left, Right</value>
-  </data>
   <data name="MetersPerUnit.Location" type="System.Drawing.Point, System.Drawing">
     <value>104, 0</value>
   </data>
@@ -988,90 +1534,6 @@
   <data name=">>label8.ZOrder" xml:space="preserve">
     <value>1</value>
   </data>
-  <data name="OfficialMethodPanel.Enabled" type="System.Boolean, mscorlib">
-    <value>False</value>
-  </data>
-  <data name="OfficialMethodPanel.Location" type="System.Drawing.Point, System.Drawing">
-    <value>24, 128</value>
-  </data>
-  <data name="OfficialMethodPanel.Size" type="System.Drawing.Size, System.Drawing">
-    <value>216, 24</value>
-  </data>
-  <data name="OfficialMethodPanel.TabIndex" type="System.Int32, mscorlib">
-    <value>13</value>
-  </data>
-  <data name=">>OfficialMethodPanel.Name" xml:space="preserve">
-    <value>OfficialMethodPanel</value>
-  </data>
-  <data name=">>OfficialMethodPanel.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>OfficialMethodPanel.Parent" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>OfficialMethodPanel.ZOrder" xml:space="preserve">
-    <value>0</value>
-  </data>
-  <data name="LimitTileset.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="LimitTileset.Location" type="System.Drawing.Point, System.Drawing">
-    <value>24, 24</value>
-  </data>
-  <data name="LimitTileset.Size" type="System.Drawing.Size, System.Drawing">
-    <value>118, 17</value>
-  </data>
-  <data name="LimitTileset.TabIndex" type="System.Int32, mscorlib">
-    <value>11</value>
-  </data>
-  <data name="LimitTileset.Text" xml:space="preserve">
-    <value>Limit number of tiles</value>
-  </data>
-  <data name="LimitTileset.ToolTip" xml:space="preserve">
-    <value>Set a limit on the number of tiles generated, note that this may prevent all tiles from being created</value>
-  </data>
-  <data name=">>LimitTileset.Name" xml:space="preserve">
-    <value>LimitTileset</value>
-  </data>
-  <data name=">>LimitTileset.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>LimitTileset.Parent" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>LimitTileset.ZOrder" xml:space="preserve">
-    <value>1</value>
-  </data>
-  <data name="UseOfficialMethod.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="UseOfficialMethod.Location" type="System.Drawing.Point, System.Drawing">
-    <value>24, 104</value>
-  </data>
-  <data name="UseOfficialMethod.Size" type="System.Drawing.Size, System.Drawing">
-    <value>116, 17</value>
-  </data>
-  <data name="UseOfficialMethod.TabIndex" type="System.Int32, mscorlib">
-    <value>10</value>
-  </data>
-  <data name="UseOfficialMethod.Text" xml:space="preserve">
-    <value>Use official method</value>
-  </data>
-  <data name="UseOfficialMethod.ToolTip" xml:space="preserve">
-    <value>The official method is the most accurate, but requires that the meters per map unit is entered</value>
-  </data>
-  <data name=">>UseOfficialMethod.Name" xml:space="preserve">
-    <value>UseOfficialMethod</value>
-  </data>
-  <data name=">>UseOfficialMethod.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>UseOfficialMethod.Parent" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>UseOfficialMethod.ZOrder" xml:space="preserve">
-    <value>2</value>
-  </data>
   <data name="MaxRowLimit.Location" type="System.Drawing.Point, System.Drawing">
     <value>104, 0</value>
   </data>
@@ -1174,78 +1636,9 @@
   <data name=">>label7.ZOrder" xml:space="preserve">
     <value>3</value>
   </data>
-  <data name="TilesetLimitPanel.Enabled" type="System.Boolean, mscorlib">
-    <value>False</value>
-  </data>
-  <data name="TilesetLimitPanel.Location" type="System.Drawing.Point, System.Drawing">
-    <value>24, 48</value>
-  </data>
-  <data name="TilesetLimitPanel.Size" type="System.Drawing.Size, System.Drawing">
-    <value>216, 48</value>
-  </data>
-  <data name="TilesetLimitPanel.TabIndex" type="System.Int32, mscorlib">
-    <value>12</value>
-  </data>
-  <data name=">>TilesetLimitPanel.Name" xml:space="preserve">
-    <value>TilesetLimitPanel</value>
-  </data>
-  <data name=">>TilesetLimitPanel.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>TilesetLimitPanel.Parent" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>TilesetLimitPanel.ZOrder" xml:space="preserve">
-    <value>3</value>
-  </data>
-  <data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 144</value>
-  </data>
-  <data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
-    <value>248, 168</value>
-  </data>
-  <data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
-    <value>6</value>
-  </data>
-  <data name="groupBox2.Text" xml:space="preserve">
-    <value>Tilesettings</value>
-  </data>
-  <data name=">>groupBox2.Name" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>groupBox2.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>groupBox2.Parent" xml:space="preserve">
-    <value>panel2</value>
-  </data>
-  <data name=">>groupBox2.ZOrder" xml:space="preserve">
-    <value>3</value>
-  </data>
-  <data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
-    <value>Right</value>
-  </data>
-  <data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
-    <value>293, 0</value>
-  </data>
-  <data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
-    <value>272, 537</value>
-  </data>
-  <data name="panel2.TabIndex" type="System.Int32, mscorlib">
-    <value>2</value>
-  </data>
-  <data name=">>panel2.Name" xml:space="preserve">
-    <value>panel2</value>
-  </data>
-  <data name=">>panel2.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>panel2.Parent" xml:space="preserve">
-    <value>$this</value>
-  </data>
-  <data name=">>panel2.ZOrder" xml:space="preserve">
-    <value>1</value>
-  </data>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>250, 17</value>
+  </metadata>
   <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>

Modified: trunk/Tools/Maestro/MgCooker/Strings.Designer.cs
===================================================================
--- trunk/Tools/Maestro/MgCooker/Strings.Designer.cs	2014-04-26 18:58:29 UTC (rev 8075)
+++ trunk/Tools/Maestro/MgCooker/Strings.Designer.cs	2014-04-26 20:27:28 UTC (rev 8076)
@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.18047
+//     Runtime Version:4.0.30319.18444
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
@@ -71,6 +71,24 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Calculating meters-per-unit.
+        /// </summary>
+        internal static string CalculatingMpu {
+            get {
+                return ResourceManager.GetString("CalculatingMpu", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Cannot calculate meters-per-unit when multiple maps are selected.
+        /// </summary>
+        internal static string CannotCalculateMpuForMultipleMaps {
+            get {
+                return ResourceManager.GetString("CannotCalculateMpuForMultipleMaps", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Unable to connect: {0}.
         /// </summary>
         internal static string ConnectionError {
@@ -233,6 +251,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Failed to calculate MPU. Output was: {0}.
+        /// </summary>
+        internal static string FailedToCalculateMpu {
+            get {
+                return ResourceManager.GetString("FailedToCalculateMpu", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to All files ({0}).
         /// </summary>
         internal static string FileTypeAllFiles {
@@ -279,6 +306,24 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to No Map Definition selected.
+        /// </summary>
+        internal static string NoMapSelected {
+            get {
+                return ResourceManager.GetString("NoMapSelected", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Could not determine any method to calculate meters per unit.
+        /// </summary>
+        internal static string NoMethodToCalculateMpu {
+            get {
+                return ResourceManager.GetString("NoMethodToCalculateMpu", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to MgCooker is now paused, click OK to resume rendering.
         /// </summary>
         internal static string PauseMessage {

Modified: trunk/Tools/Maestro/MgCooker/Strings.resx
===================================================================
--- trunk/Tools/Maestro/MgCooker/Strings.resx	2014-04-26 18:58:29 UTC (rev 8075)
+++ trunk/Tools/Maestro/MgCooker/Strings.resx	2014-04-26 20:27:28 UTC (rev 8076)
@@ -122,6 +122,12 @@
 Please be patient.</value>
     <comment>A message that is displayed when the user clicks quit more than once</comment>
   </data>
+  <data name="CalculatingMpu" xml:space="preserve">
+    <value>Calculating meters-per-unit</value>
+  </data>
+  <data name="CannotCalculateMpuForMultipleMaps" xml:space="preserve">
+    <value>Cannot calculate meters-per-unit when multiple maps are selected</value>
+  </data>
   <data name="ConnectionError" xml:space="preserve">
     <value>Unable to connect: {0}</value>
     <comment>An error message that is displayed, when the initial connection fails</comment>
@@ -194,6 +200,9 @@
     <value>Tile {0:###,###,###,###} of {1:###,###,###,###} {2}</value>
     <comment>Label that displays the current tile and the total number of tiles and number of failed tiles, eg: tile 1 of 100 (5 failed tiles)</comment>
   </data>
+  <data name="FailedToCalculateMpu" xml:space="preserve">
+    <value>Failed to calculate MPU. Output was: {0}</value>
+  </data>
   <data name="FileTypeAllFiles" xml:space="preserve">
     <value>All files ({0})</value>
     <comment>The name displayed for the *.* filetype when the user is prompted to save a file</comment>
@@ -215,6 +224,12 @@
 Either copy in the file, or do not use the Native connection method</value>
     <comment>A message displayed when the webconfig.ini file is missing</comment>
   </data>
+  <data name="NoMapSelected" xml:space="preserve">
+    <value>No Map Definition selected</value>
+  </data>
+  <data name="NoMethodToCalculateMpu" xml:space="preserve">
+    <value>Could not determine any method to calculate meters per unit</value>
+  </data>
   <data name="PauseMessage" xml:space="preserve">
     <value>MgCooker is now paused, click OK to resume rendering</value>
     <comment>A text message displayed when MgCooker is paused</comment>


Property changes on: trunk/Tools/Maestro/MpuCalc
___________________________________________________________________
Added: svn:ignore
   + bin
obj
*.user


Added: trunk/Tools/Maestro/MpuCalc/App.config
===================================================================
--- trunk/Tools/Maestro/MpuCalc/App.config	                        (rev 0)
+++ trunk/Tools/Maestro/MpuCalc/App.config	2014-04-26 20:27:28 UTC (rev 8076)
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
+    </startup>
+</configuration>

Added: trunk/Tools/Maestro/MpuCalc/MpuCalc.csproj
===================================================================
--- trunk/Tools/Maestro/MpuCalc/MpuCalc.csproj	                        (rev 0)
+++ trunk/Tools/Maestro/MpuCalc/MpuCalc.csproj	2014-04-26 20:27:28 UTC (rev 8076)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{43B01C27-E0D2-439B-83ED-8C814ED1526A}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MpuCalc</RootNamespace>
+    <AssemblyName>MpuCalc</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\Maestro\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <TargetFrameworkProfile>Client</TargetFrameworkProfile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\out\Debug\AddIns\Local\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\out\Release\AddIns\Local\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="OSGeo.MapGuide.Foundation, Version=2.5.2.7949, Culture=neutral, PublicKeyToken=f526c48929fda856, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Maestro\packages\mapguide-api-base-x86.2.5.2.7949\lib\net40\OSGeo.MapGuide.Foundation.dll</HintPath>
+    </Reference>
+    <Reference Include="OSGeo.MapGuide.Geometry, Version=2.5.2.7949, Culture=neutral, PublicKeyToken=f526c48929fda856, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Maestro\packages\mapguide-api-base-x86.2.5.2.7949\lib\net40\OSGeo.MapGuide.Geometry.dll</HintPath>
+    </Reference>
+    <Reference Include="OSGeo.MapGuide.PlatformBase, Version=2.5.2.7949, Culture=neutral, PublicKeyToken=f526c48929fda856, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Maestro\packages\mapguide-api-base-x86.2.5.2.7949\lib\net40\OSGeo.MapGuide.PlatformBase.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
+  </Target>
+  <PropertyGroup>
+    <PostBuildEvent>
+xcopy /s /y "$(SolutionDir)packages\mapguide-api-base-x86.2.5.2.7949\mapguide-api-base\*.*" "$(TargetDir)"</PostBuildEvent>
+  </PropertyGroup>
+  <!-- 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

Added: trunk/Tools/Maestro/MpuCalc/Program.cs
===================================================================
--- trunk/Tools/Maestro/MpuCalc/Program.cs	                        (rev 0)
+++ trunk/Tools/Maestro/MpuCalc/Program.cs	2014-04-26 20:27:28 UTC (rev 8076)
@@ -0,0 +1,77 @@
+#region Disclaimer / License
+// Copyright (C) 2014, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using OSGeo.MapGuide;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MpuCalc
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            if (args.Length == 1)
+            {
+                if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("MENTOR_DICTIONARY_PATH")))
+                {
+                    var currentDir = Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath);
+                    var dictionaryDir = Path.Combine(currentDir, "Dictionaries");
+                    if (Directory.Exists(dictionaryDir))
+                        Environment.SetEnvironmentVariable("MENTOR_DICTIONARY_PATH", dictionaryDir, EnvironmentVariableTarget.Process);
+                    else
+                        Console.WriteLine("Error: Could not find CS-Map dictionary path");
+                }
+
+                MgCoordinateSystemFactory csFact = null;
+                MgCoordinateSystem cs = null;
+                try
+                {
+                    csFact = new MgCoordinateSystemFactory();
+                    cs = csFact.Create(args[0]);
+                    double mpu = cs.ConvertCoordinateSystemUnitsToMeters(1.0);
+                    Console.WriteLine(mpu);
+                    cs.Dispose();
+                    csFact.Dispose();
+                }
+                catch (MgException ex)
+                {
+                    Console.WriteLine(ex.Message);
+                    ex.Dispose();
+                }
+                finally
+                {
+                    if (cs != null)
+                        cs.Dispose();
+                    if (csFact != null)
+                        csFact.Dispose();
+                }
+            }
+            else
+            {
+                Console.WriteLine("Error: Insufficient arguments. Usage: MpuCalc.exe [Coord sys WKT]");
+            }
+        }
+    }
+}


Property changes on: trunk/Tools/Maestro/MpuCalc/Properties
___________________________________________________________________
Added: bugtraq:number
   + true

Added: trunk/Tools/Maestro/MpuCalc/Properties/AssemblyInfo.cs
===================================================================
--- trunk/Tools/Maestro/MpuCalc/Properties/AssemblyInfo.cs	                        (rev 0)
+++ trunk/Tools/Maestro/MpuCalc/Properties/AssemblyInfo.cs	2014-04-26 20:27:28 UTC (rev 8076)
@@ -0,0 +1,36 @@
+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("MpuCalc")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MpuCalc")]
+[assembly: AssemblyCopyright("Copyright ©  2014")]
+[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("0becf425-6ac4-454e-a961-906568941d7d")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

Added: trunk/Tools/Maestro/MpuCalc/packages.config
===================================================================
--- trunk/Tools/Maestro/MpuCalc/packages.config	                        (rev 0)
+++ trunk/Tools/Maestro/MpuCalc/packages.config	2014-04-26 20:27:28 UTC (rev 8076)
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="mapguide-api-base-x86" version="2.5.2.7949" targetFramework="net45" />
+</packages>
\ No newline at end of file



More information about the mapguide-commits mailing list