[mapguide-commits] r4850 - in sandbox/maestro-2.5: . Maestro Maestro/Properties Maestro.Base Maestro.Base/Commands Maestro.Base/Properties Maestro.Base/Resources

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Tue May 11 07:40:16 EDT 2010


Author: jng
Date: 2010-05-11 07:40:15 -0400 (Tue, 11 May 2010)
New Revision: 4850

Added:
   sandbox/maestro-2.5/Maestro.Base/
   sandbox/maestro-2.5/Maestro.Base/Commands/
   sandbox/maestro-2.5/Maestro.Base/Commands/NotImplementedCommand.cs
   sandbox/maestro-2.5/Maestro.Base/Commands/QuitCommand.cs
   sandbox/maestro-2.5/Maestro.Base/Commands/StartupCommand.cs
   sandbox/maestro-2.5/Maestro.Base/ISubView.cs
   sandbox/maestro-2.5/Maestro.Base/IViewContent.cs
   sandbox/maestro-2.5/Maestro.Base/Maestro.Base.addin
   sandbox/maestro-2.5/Maestro.Base/Maestro.Base.csproj
   sandbox/maestro-2.5/Maestro.Base/Properties/
   sandbox/maestro-2.5/Maestro.Base/Properties/AssemblyInfo.cs
   sandbox/maestro-2.5/Maestro.Base/Properties/Resources.Designer.cs
   sandbox/maestro-2.5/Maestro.Base/Properties/Resources.resx
   sandbox/maestro-2.5/Maestro.Base/Resources/
   sandbox/maestro-2.5/Maestro.Base/Resources/MapGuide Maestro.ico
   sandbox/maestro-2.5/Maestro.Base/Resources/server.png
   sandbox/maestro-2.5/Maestro.Base/Services/
   sandbox/maestro-2.5/Maestro.Base/SiteExplorer.Designer.cs
   sandbox/maestro-2.5/Maestro.Base/SiteExplorer.cs
   sandbox/maestro-2.5/Maestro.Base/SiteExplorer.resx
   sandbox/maestro-2.5/Maestro.Base/TabFactory.cs
   sandbox/maestro-2.5/Maestro.Base/ViewContentBase.Designer.cs
   sandbox/maestro-2.5/Maestro.Base/ViewContentBase.cs
   sandbox/maestro-2.5/Maestro.Base/Workbench.Designer.cs
   sandbox/maestro-2.5/Maestro.Base/Workbench.cs
   sandbox/maestro-2.5/Maestro.Base/Workbench.resx
   sandbox/maestro-2.5/Maestro.Base/ZonedContainer.Designer.cs
   sandbox/maestro-2.5/Maestro.Base/ZonedContainer.cs
   sandbox/maestro-2.5/Maestro.Base/ZonedContainer.resx
   sandbox/maestro-2.5/Maestro/
   sandbox/maestro-2.5/Maestro/AddIns/
   sandbox/maestro-2.5/Maestro/Maestro.csproj
   sandbox/maestro-2.5/Maestro/Maestro.sh
   sandbox/maestro-2.5/Maestro/Maestro.sln
   sandbox/maestro-2.5/Maestro/MapGuide Maestro.ico
   sandbox/maestro-2.5/Maestro/Program.cs
   sandbox/maestro-2.5/Maestro/Properties/
   sandbox/maestro-2.5/Maestro/Properties/AssemblyInfo.cs
   sandbox/maestro-2.5/Maestro/Properties/Resources.Designer.cs
   sandbox/maestro-2.5/Maestro/Properties/Resources.resx
   sandbox/maestro-2.5/Maestro/Properties/Settings.Designer.cs
   sandbox/maestro-2.5/Maestro/Properties/Settings.settings
Modified:
   sandbox/maestro-2.5/
Log:
Add the base addin, which will provide the core infrastructure for the Maestro application


Property changes on: sandbox/maestro-2.5
___________________________________________________________________
Added: svn:ignore
   + out



Property changes on: sandbox/maestro-2.5/Maestro
___________________________________________________________________
Added: svn:ignore
   + Maestro.suo


Added: sandbox/maestro-2.5/Maestro/Maestro.csproj
===================================================================
--- sandbox/maestro-2.5/Maestro/Maestro.csproj	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro/Maestro.csproj	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,98 @@
+<?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.21022</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E0C36475-2B70-4F6D-ACE0-8943167806DC}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Maestro</RootNamespace>
+    <AssemblyName>Maestro</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ApplicationIcon>MapGuide Maestro.ico</ApplicationIcon>
+  </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>
+    <PlatformTarget>x86</PlatformTarget>
+  </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>
+    <PlatformTarget>x86</PlatformTarget>
+  </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="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <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>
+    </Compile>
+    <None Include="Maestro.sh">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+    <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>
+    <Content Include="..\Maestro.Base\Maestro.Base.addin">
+      <Link>AddIns\Maestro.Base.addin</Link>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="MapGuide Maestro.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Maestro.Base\Maestro.Base.csproj">
+      <Project>{F1E2F468-5030-4DBA-968C-9620284AFAA1}</Project>
+      <Name>Maestro.Base</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\Thirdparty\SharpDevelop\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj">
+      <Project>{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}</Project>
+      <Name>ICSharpCode.Core.WinForms</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\Thirdparty\SharpDevelop\ICSharpCode.Core\ICSharpCode.Core.csproj">
+      <Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
+      <Name>ICSharpCode.Core</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

Added: sandbox/maestro-2.5/Maestro/Maestro.sh
===================================================================
--- sandbox/maestro-2.5/Maestro/Maestro.sh	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro/Maestro.sh	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,2 @@
+#!/bin/sh
+mono Maestro.exe
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro/Maestro.sln
===================================================================
--- sandbox/maestro-2.5/Maestro/Maestro.sln	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro/Maestro.sln	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,51 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Maestro", "Maestro.csproj", "{E0C36475-2B70-4F6D-ACE0-8943167806DC}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Thirdparty", "Thirdparty", "{EB18A52E-9245-4D60-8C68-3D6C6EEA38A7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "..\Thirdparty\SharpDevelop\ICSharpCode.Core\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "..\Thirdparty\SharpDevelop\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{7C52C291-B8DC-40DC-9AFB-F4A9CADC442B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Maestro API", "Maestro API", "{ED1D6D53-C3B5-4FE3-A5B1-CBA8472CE2FE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Maestro.Base", "..\Maestro.Base\Maestro.Base.csproj", "{F1E2F468-5030-4DBA-968C-9620284AFAA1}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Maestro Shared Components", "Maestro Shared Components", "{CCF50F7F-DD89-41C1-843C-1BFA2375EEE0}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{E0C36475-2B70-4F6D-ACE0-8943167806DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E0C36475-2B70-4F6D-ACE0-8943167806DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E0C36475-2B70-4F6D-ACE0-8943167806DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E0C36475-2B70-4F6D-ACE0-8943167806DC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F1E2F468-5030-4DBA-968C-9620284AFAA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F1E2F468-5030-4DBA-968C-9620284AFAA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F1E2F468-5030-4DBA-968C-9620284AFAA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F1E2F468-5030-4DBA-968C-9620284AFAA1}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {EB18A52E-9245-4D60-8C68-3D6C6EEA38A7}
+		{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {EB18A52E-9245-4D60-8C68-3D6C6EEA38A7}
+		{F1E2F468-5030-4DBA-968C-9620284AFAA1} = {7C52C291-B8DC-40DC-9AFB-F4A9CADC442B}
+	EndGlobalSection
+EndGlobal

Added: sandbox/maestro-2.5/Maestro/MapGuide Maestro.ico
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro/MapGuide Maestro.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro/Program.cs
===================================================================
--- sandbox/maestro-2.5/Maestro/Program.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro/Program.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,129 @@
+#region Disclaimer / License
+// Copyright (C) 2010, 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;
+using ICSharpCode.Core;
+using System.IO;
+using Maestro.Base;
+using System.Reflection;
+
+namespace Maestro
+{
+    static class Program
+    {
+        /// <summary>
+        /// The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(true);
+            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
+
+            // The LoggingService is a small wrapper around log4net.
+            // Our application contains a .config file telling log4net to write
+            // to System.Diagnostics.Trace.
+            LoggingService.Info("Application start");
+
+            AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad);
+
+            // Get a reference to the entry assembly (Startup.exe)
+            Assembly exe = typeof(Program).Assembly;
+
+            // Set the root path of our application. ICSharpCode.Core looks for some other
+            // paths relative to the application root:
+            // "data/resources" for language resources, "data/options" for default options
+            FileUtility.ApplicationRootPath = Path.GetDirectoryName(exe.Location);
+
+            LoggingService.Info("Starting core services...");
+
+            // CoreStartup is a helper class making starting the Core easier.
+            // The parameter is used as the application name, e.g. for the default title of
+            // MessageService.ShowMessage() calls.
+            CoreStartup coreStartup = new CoreStartup("MapGuide Maestro");
+            // It is also used as default storage location for the application settings:
+            // "%Application Data%\%Application Name%", but you can override that by setting c.ConfigDirectory
+
+            // Specify the name of the application settings file (.xml is automatically appended)
+            coreStartup.PropertiesName = "AppProperties";
+
+            // Initializes the Core services (ResourceService, PropertyService, etc.)
+            coreStartup.StartCoreServices();
+
+            LoggingService.Info("Looking for AddIns...");
+            // Searches for ".addin" files in the application directory.
+            coreStartup.AddAddInsFromDirectory(Path.Combine(FileUtility.ApplicationRootPath, "AddIns"));
+
+            // Searches for a "AddIns.xml" in the user profile that specifies the names of the
+            // add-ins that were deactivated by the user, and adds "external" AddIns.
+            coreStartup.ConfigureExternalAddIns(Path.Combine(PropertyService.ConfigDirectory, "AddIns.xml"));
+
+            // Searches for add-ins installed by the user into his profile directory. This also
+            // performs the job of installing, uninstalling or upgrading add-ins if the user
+            // requested it the last time this application was running.
+            coreStartup.ConfigureUserAddIns(Path.Combine(PropertyService.ConfigDirectory, "AddInInstallTemp"),
+                                            Path.Combine(PropertyService.ConfigDirectory, "AddIns"));
+
+
+            LoggingService.Info("Loading AddInTree...");
+            // Now finally initialize the application. This parses the ".addin" files and
+            // creates the AddIn tree. It also automatically runs the commands in
+            // "/Workspace/Autostart"
+            coreStartup.RunInitialization();
+
+            LoggingService.Info("Initializing Workbench...");
+            // Workbench is our class from the base project, this method creates an instance
+            // of the main form.
+            Workbench.InitializeWorkbench();
+
+            try
+            {
+                LoggingService.Info("Running application...");
+                // Workbench.Instance is the instance of the main form, run the message loop.
+                Application.Run(Workbench.Instance);
+            }
+            finally
+            {
+                try
+                {
+                    // Save changed properties
+                    PropertyService.Save();
+                }
+                catch (Exception ex)
+                {
+                    MessageService.ShowError(ex, "Error storing properties");
+                }
+            }
+            LoggingService.Info("Application shutdown");
+        }
+
+        static void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
+        {
+            LoggingService.InfoFormatted("Loaded assembly: {0}", args.LoadedAssembly.GetName().Name);
+        }
+
+        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
+        {
+            MessageService.ShowError(e.Exception);
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro/Properties/AssemblyInfo.cs
===================================================================
--- sandbox/maestro-2.5/Maestro/Properties/AssemblyInfo.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro/Properties/AssemblyInfo.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -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("Maestro")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Maestro")]
+[assembly: AssemblyCopyright("Copyright ©  2010")]
+[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("7b3df554-cb48-48d7-b8b7-8324c2cb9ffa")]
+
+// 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: sandbox/maestro-2.5/Maestro/Properties/Resources.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro/Properties/Resources.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro/Properties/Resources.Designer.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Maestro.Properties
+{
+
+
+    /// <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 ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Maestro.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;
+            }
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro/Properties/Resources.resx
===================================================================
--- sandbox/maestro-2.5/Maestro/Properties/Resources.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro/Properties/Resources.resx	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,117 @@
+<?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.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: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" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </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" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro/Properties/Settings.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro/Properties/Settings.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro/Properties/Settings.Designer.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Maestro.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: sandbox/maestro-2.5/Maestro/Properties/Settings.settings
===================================================================
--- sandbox/maestro-2.5/Maestro/Properties/Settings.settings	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro/Properties/Settings.settings	2010-05-11 11:40:15 UTC (rev 4850)
@@ -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: sandbox/maestro-2.5/Maestro.Base/Commands/NotImplementedCommand.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/Commands/NotImplementedCommand.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/Commands/NotImplementedCommand.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,34 @@
+#region Disclaimer / License
+// Copyright (C) 2010, 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;
+
+namespace Maestro.Base.Commands
+{
+    internal class NotImplementedCommand : AbstractMenuCommand
+    {
+        public override void Run()
+        {
+            throw new NotImplementedException();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Base/Commands/QuitCommand.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/Commands/QuitCommand.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/Commands/QuitCommand.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,38 @@
+#region Disclaimer / License
+// Copyright (C) 2010, 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;
+
+namespace Maestro.Base.Commands
+{
+    internal class QuitCommand : AbstractMenuCommand
+    {
+        public override void Run()
+        {
+            Workbench wb = Workbench.Instance;
+            if (wb != null)
+            {
+                wb.Close();
+            }
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Base/Commands/StartupCommand.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/Commands/StartupCommand.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/Commands/StartupCommand.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,44 @@
+#region Disclaimer / License
+// Copyright (C) 2010, 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 System.Reflection;
+
+namespace Maestro.Base.Commands
+{
+    internal class StartupCommand : AbstractCommand
+    {
+        public override void Run()
+        {
+            ResourceService.RegisterNeutralStrings(Properties.Resources.ResourceManager);
+
+            Workbench.WorkbenchInitialized += (sender, e) =>
+            {
+                var wb = Workbench.Instance;
+                wb.Text = "MapGuide Maestro";
+
+                //var exp = new SiteExplorer();
+                //wb.ShowContent(exp, ViewRegion.Left);
+            };
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Base/ISubView.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/ISubView.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/ISubView.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, 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 System.Windows.Forms;
+
+namespace Maestro.Base
+{
+    /// <summary>
+    /// A control sub view
+    /// </summary>
+    public interface ISubView
+    {
+        /// <summary>
+        /// The underlying control
+        /// </summary>
+        Control ContentControl { get; }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Base/IViewContent.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/IViewContent.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/IViewContent.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,116 @@
+#region Disclaimer / License
+// Copyright (C) 2010, 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 System.Drawing;
+
+namespace Maestro.Base
+{
+    /// <summary>
+    /// Abstract view interface.
+    /// </summary>
+    public interface IViewContent : ISubView
+    {
+        /// <summary>
+        /// The title of the view
+        /// </summary>
+        string Title { get; set; }
+        /// <summary>
+        /// Fires when the title has been changed
+        /// </summary>
+        event EventHandler TitleChanged;
+        /// <summary>
+        /// Detrmines if this view can be closed
+        /// </summary>
+        bool CanClose { get; }
+        /// <summary>
+        /// Closes the view. This raises the <see cref="ViewContentClosing"/> event
+        /// </summary>
+        /// <returns></returns>
+        void Close();
+        /// <summary>
+        /// Fired when the view has been closed internally
+        /// </summary>
+        event EventHandler ViewContentClosing;
+        /// <summary>
+        /// Displays an exception message
+        /// </summary>
+        /// <param name="ex">The exception object</param>
+        void ShowError(Exception ex);
+        /// <summary>
+        /// Displays an error message
+        /// </summary>
+        /// <param name="message">The message</param>
+        void ShowError(string message);
+        /// <summary>
+        /// Displays an alert message
+        /// </summary>
+        /// <param name="title">The title of this message</param>
+        /// <param name="message">The message</param>
+        void ShowMessage(string title, string message);
+        /// <summary>
+        /// Make a request for confirmation
+        /// </summary>
+        /// <param name="title">The title of the confirmation message</param>
+        /// <param name="message">The message</param>
+        /// <returns>true if confirmed, false otherwise</returns>
+        bool Confirm(string title, string message);
+        /// <summary>
+        /// Make a request for confirmation
+        /// </summary>
+        /// <param name="title">The title of the confirmation message</param>
+        /// <param name="format">The message template</param>
+        /// <param name="args">The template values</param>
+        /// <returns>true if confirmed, false otherwise</returns>
+        bool ConfirmFormatted(string title, string format, params string[] args);
+    }
+
+    /// <summary>
+    /// Defines the possible regions of the user interface a <see cref="IViewContent"/> can reside in 
+    /// </summary>
+    public enum ViewRegion
+    {
+        /// <summary>
+        /// The view content will be docked to the left
+        /// </summary>
+        Left,
+        /// <summary>
+        /// The view content will be docked to the right
+        /// </summary>
+        Right,
+        /// <summary>
+        /// The view content will be docked to the bottom
+        /// </summary>
+        Bottom,
+        /// <summary>
+        /// The view content will be docked to the center, (in a tabbed document interface)
+        /// </summary>
+        Document,
+        /// <summary>
+        /// The view content will reside in a floating dialog
+        /// </summary>
+        Floating,
+        /// <summary>
+        /// The view content will reside in a modal dialog
+        /// </summary>
+        Dialog
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Base/Maestro.Base.addin
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/Maestro.Base.addin	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/Maestro.Base.addin	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,48 @@
+<AddIn name="Maestro.Base"
+       author="Jackie Ng"
+       url="http://trac.osgeo.org/mapguide/wiki/maestro"
+       description="Base Component for MapGuide Maestro"
+       addInManagerHidden="preinstalled">
+
+    <Manifest>
+        <Identity name="Maestro.Base" />
+    </Manifest>
+
+    <Runtime>
+        <Import assembly="../Maestro.Base.dll" />
+    </Runtime>
+    
+    <!-- Main Menu Definition -->
+    <Path name="/Maestro/Shell/MainMenu">
+        <MenuItem id="Menu_File"
+                  type="Menu"
+                  label="${res:Menu_File}">
+            <MenuItem id="Menu_File_Quit"
+                      label="${res:Menu_File_Quit}"
+                      class="Maestro.Base.Commands.QuitCommand" />
+        </MenuItem>
+        <MenuItem id="Menu_Tools"
+                  type="Menu"
+                  label="${res:Menu_Tools}">
+            
+        </MenuItem>
+        <MenuItem id="Menu_Help"
+                  type="Menu"
+                  label="${res:Menu_Help}">
+            <MenuItem id="Menu_Help_About"
+                      label="${res:Menu_Help_About}"
+                      class="Maestro.Base.Commands.NotImplementedCommand" />
+        </MenuItem>
+    </Path>
+
+    <!-- Auto-start commands -->
+    <Path name="/Workspace/Autostart">
+        <Class id="Startup" class="Maestro.Base.Commands.StartupCommand" />
+    </Path>
+
+    <!-- Toolbar Definition -->
+    <Path name="/Maestro/Shell/Toolbars/Main">
+
+    </Path>
+    
+</AddIn>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Base/Maestro.Base.csproj
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/Maestro.Base.csproj	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/Maestro.Base.csproj	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,126 @@
+<?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.21022</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{F1E2F468-5030-4DBA-968C-9620284AFAA1}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Maestro.Base</RootNamespace>
+    <AssemblyName>Maestro.Base</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.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Commands\NotImplementedCommand.cs" />
+    <Compile Include="Commands\QuitCommand.cs" />
+    <Compile Include="Commands\StartupCommand.cs" />
+    <Compile Include="ISubView.cs" />
+    <Compile Include="IViewContent.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="SiteExplorer.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SiteExplorer.Designer.cs">
+      <DependentUpon>SiteExplorer.cs</DependentUpon>
+    </Compile>
+    <Compile Include="TabFactory.cs" />
+    <Compile Include="ViewContentBase.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ViewContentBase.Designer.cs">
+      <DependentUpon>ViewContentBase.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Workbench.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Workbench.Designer.cs">
+      <DependentUpon>Workbench.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ZonedContainer.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ZonedContainer.Designer.cs">
+      <DependentUpon>ZonedContainer.cs</DependentUpon>
+    </Compile>
+    <Service Include="{94E38DFF-614B-4cbd-B67C-F211BB35CE8B}" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Maestro.Base.addin" />
+    <None Include="Resources\server.png" />
+    <None Include="Resources\MapGuide Maestro.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SiteExplorer.resx">
+      <DependentUpon>SiteExplorer.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Workbench.resx">
+      <DependentUpon>Workbench.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ZonedContainer.resx">
+      <DependentUpon>ZonedContainer.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Thirdparty\SharpDevelop\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj">
+      <Project>{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}</Project>
+      <Name>ICSharpCode.Core.WinForms</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\Thirdparty\SharpDevelop\ICSharpCode.Core\ICSharpCode.Core.csproj">
+      <Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
+      <Name>ICSharpCode.Core</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Services\" />
+  </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

Added: sandbox/maestro-2.5/Maestro.Base/Properties/AssemblyInfo.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/Properties/AssemblyInfo.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/Properties/AssemblyInfo.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -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("Maestro.Base")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Maestro.Base")]
+[assembly: AssemblyCopyright("Copyright ©  2010")]
+[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("e6c407e4-f4c3-4874-9be6-ad75c6495407")]
+
+// 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: sandbox/maestro-2.5/Maestro.Base/Properties/Resources.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/Properties/Resources.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/Properties/Resources.Designer.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Maestro.Base.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("Maestro.Base.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 Site Explorer: {0}.
+        /// </summary>
+        internal static string Content_SiteExplorer {
+            get {
+                return ResourceManager.GetString("Content_SiteExplorer", resourceCulture);
+            }
+        }
+        
+        internal static System.Drawing.Icon MapGuide_Maestro {
+            get {
+                object obj = ResourceManager.GetObject("MapGuide_Maestro", resourceCulture);
+                return ((System.Drawing.Icon)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to File.
+        /// </summary>
+        internal static string Menu_File {
+            get {
+                return ResourceManager.GetString("Menu_File", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Quit.
+        /// </summary>
+        internal static string Menu_File_Quit {
+            get {
+                return ResourceManager.GetString("Menu_File_Quit", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Help.
+        /// </summary>
+        internal static string Menu_Help {
+            get {
+                return ResourceManager.GetString("Menu_Help", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to About.
+        /// </summary>
+        internal static string Menu_Help_About {
+            get {
+                return ResourceManager.GetString("Menu_Help_About", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Tools.
+        /// </summary>
+        internal static string Menu_Tools {
+            get {
+                return ResourceManager.GetString("Menu_Tools", resourceCulture);
+            }
+        }
+        
+        internal static System.Drawing.Bitmap server {
+            get {
+                object obj = ResourceManager.GetObject("server", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Base/Properties/Resources.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/Properties/Resources.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/Properties/Resources.resx	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,145 @@
+<?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="Content_SiteExplorer" xml:space="preserve">
+    <value>Site Explorer: {0}</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="MapGuide_Maestro" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\MapGuide Maestro.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Menu_File" xml:space="preserve">
+    <value>File</value>
+  </data>
+  <data name="Menu_File_Quit" xml:space="preserve">
+    <value>Quit</value>
+  </data>
+  <data name="Menu_Help" xml:space="preserve">
+    <value>Help</value>
+  </data>
+  <data name="Menu_Help_About" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="Menu_Tools" xml:space="preserve">
+    <value>Tools</value>
+  </data>
+  <data name="server" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\server.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Base/Resources/MapGuide Maestro.ico
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Base/Resources/MapGuide Maestro.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Base/Resources/server.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-2.5/Maestro.Base/Resources/server.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-2.5/Maestro.Base/SiteExplorer.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/SiteExplorer.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/SiteExplorer.Designer.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,69 @@
+namespace Maestro.Base
+{
+    partial class SiteExplorer
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.trvResources = new System.Windows.Forms.TreeView();
+            this.SuspendLayout();
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Size = new System.Drawing.Size(233, 25);
+            this.toolStrip1.TabIndex = 0;
+            this.toolStrip1.Text = "toolStrip1";
+            // 
+            // trvResources
+            // 
+            this.trvResources.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.trvResources.Location = new System.Drawing.Point(0, 25);
+            this.trvResources.Name = "trvResources";
+            this.trvResources.Size = new System.Drawing.Size(233, 458);
+            this.trvResources.TabIndex = 1;
+            // 
+            // SiteExplorer
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.trvResources);
+            this.Controls.Add(this.toolStrip1);
+            this.Name = "SiteExplorer";
+            this.Size = new System.Drawing.Size(233, 483);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.TreeView trvResources;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Base/SiteExplorer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/SiteExplorer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/SiteExplorer.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,38 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Maestro.Base
+{
+    public partial class SiteExplorer : ViewContentBase
+    {
+        public SiteExplorer()
+        {
+            InitializeComponent();
+            this.Title = string.Format(Properties.Resources.Content_SiteExplorer, "Test");
+        }
+    }
+}

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

Added: sandbox/maestro-2.5/Maestro.Base/TabFactory.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/TabFactory.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/TabFactory.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,46 @@
+#region Disclaimer / License
+// Copyright (C) 2010, 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 System.Windows.Forms;
+
+namespace Maestro.Base
+{
+    internal static class TabFactory
+    {
+        internal static TabPage CreateTab(IViewContent content, string imgKey)
+        {
+            TabPage page = new TabPage();
+            page.ImageKey = imgKey;
+            page.Text = content.Title;
+            page.ToolTipText = content.Title;
+            content.TitleChanged += (sender, e) => 
+            { 
+                page.Text = content.Title;
+                page.ToolTipText = content.Title;
+            };
+            content.ContentControl.Dock = DockStyle.Fill;
+            page.Controls.Add(content.ContentControl);
+
+            return page;
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Base/ViewContentBase.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/ViewContentBase.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/ViewContentBase.Designer.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,37 @@
+namespace Maestro.Base
+{
+    partial class ViewContentBase
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new System.ComponentModel.Container();
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+        }
+
+        #endregion
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Base/ViewContentBase.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/ViewContentBase.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/ViewContentBase.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,108 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using ICSharpCode.Core.WinForms;
+using ICSharpCode.Core;
+
+namespace Maestro.Base
+{
+    /// <summary>
+    /// The base class of all view content. Provides the default implementation of <see cref="IViewContent"/>
+    /// </summary>
+    public partial class ViewContentBase : UserControl, IViewContent
+    {
+        public ViewContentBase()
+        {
+            InitializeComponent();
+        }
+
+        private string _title;
+
+        public string Title
+        {
+            get
+            {
+                return _title;
+            }
+            set
+            {
+                if (_title != value)
+                {
+                    _title = value;
+                    var handler = this.TitleChanged;
+                    if (handler != null)
+                        handler(this, EventArgs.Empty);
+                }
+            }
+        }
+
+        public event EventHandler TitleChanged;
+
+        public virtual bool CanClose
+        {
+            get { return true; }
+        }
+
+        public void Close()
+        {
+            var handler = this.ViewContentClosing;
+            if (handler != null)
+                handler(this, EventArgs.Empty);
+        }
+
+        public event EventHandler ViewContentClosing;
+
+        public void ShowError(Exception ex)
+        {
+            MessageService.ShowError(ex);
+        }
+
+        public void ShowError(string message)
+        {
+            MessageService.ShowError(message);
+        }
+
+        public void ShowMessage(string title, string message)
+        {
+            MessageService.ShowMessage(message, title);
+        }
+
+        public bool Confirm(string title, string message)
+        {
+            return MessageService.AskQuestion(message, title);
+        }
+
+        public bool ConfirmFormatted(string title, string format, params string[] args)
+        {
+            return MessageService.AskQuestion(string.Format(format, args), title);
+        }
+
+        public Control ContentControl
+        {
+            get { return this; }
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Base/Workbench.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/Workbench.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/Workbench.Designer.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,47 @@
+namespace Maestro.Base
+{
+    partial class Workbench
+    {
+        /// <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.SuspendLayout();
+            // 
+            // Workbench
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(792, 566);
+            this.Name = "Workbench";
+            this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+    }
+}
\ No newline at end of file

Added: sandbox/maestro-2.5/Maestro.Base/Workbench.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/Workbench.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/Workbench.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,343 @@
+#region Disclaimer / License
+// Copyright (C) 2010, 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 ICSharpCode.Core.WinForms;
+using ICSharpCode.Core;
+using ICSharpCode.Core.Services;
+
+namespace Maestro.Base
+{
+    public sealed partial class Workbench : Form
+    {
+        static Workbench instance;
+
+        /// <summary>
+        /// Gets the instance.
+        /// </summary>
+        /// <value>The instance.</value>
+        public static Workbench Instance
+        {
+            get
+            {
+                return instance;
+            }
+        }
+
+        /// <summary>
+        /// Occurs when [workbench initialized].
+        /// </summary>
+        public static event EventHandler WorkbenchInitialized = delegate { };
+
+        private static bool _init = false;
+
+        /// <summary>
+        /// Initializes the workbench.
+        /// </summary>
+        public static void InitializeWorkbench()
+        {
+            if (!_init)
+            {
+                instance = new Workbench();
+                _init = true;
+                WorkbenchInitialized(instance, EventArgs.Empty);
+            }
+        }
+
+        MenuStrip menu;
+        ToolStripContainer toolStripContainer;
+        ToolStrip toolbar;
+        
+        StatusStrip status;
+        ToolStripStatusLabel statusLabel;
+
+        ZonedContainer contentPanel;
+
+        ContextMenuStrip ctxToolbar;
+
+        private Workbench()
+        {
+            InitializeComponent();
+
+            _toolstrips = new Dictionary<string, ToolStrip>();
+            _toolstripRegions = new Dictionary<string, ToolbarRegion>();
+
+            this.Icon = Properties.Resources.MapGuide_Maestro;
+
+            contentPanel = new ZonedContainer();
+            contentPanel.Dock = DockStyle.Fill;
+
+            menu = new MenuStrip();
+            MenuService.AddItemsToMenu(menu.Items, this, "/Maestro/Shell/MainMenu");
+
+            toolStripContainer = new ToolStripContainer();
+            toolStripContainer.ContentPanel.Controls.Add(contentPanel);
+            toolStripContainer.Dock = DockStyle.Fill;
+
+            this.Controls.Add(toolStripContainer);
+
+            ctxToolbar = new ContextMenuStrip();
+            toolStripContainer.TopToolStripPanel.ContextMenuStrip = ctxToolbar;
+            toolStripContainer.BottomToolStripPanel.ContextMenuStrip = ctxToolbar;
+            toolStripContainer.LeftToolStripPanel.ContextMenuStrip = ctxToolbar;
+            toolStripContainer.RightToolStripPanel.ContextMenuStrip = ctxToolbar;
+
+            toolbar = ToolbarService.CreateToolStrip(this, "/Maestro/Shell/Toolbars/Main");
+            AddToolbar("Base", toolbar, ToolbarRegion.Top, false);
+
+            status = new StatusStrip();
+            statusLabel = new ToolStripStatusLabel();
+            status.Items.Add(statusLabel);
+
+            this.Controls.Add(menu);
+            this.Controls.Add(status);
+
+            // Use the Idle event to update the status of menu and toolbar items.
+            Application.Idle += OnApplicationIdle;
+        }
+
+        private Dictionary<string, ToolStrip> _toolstrips;
+        private Dictionary<string, ToolbarRegion> _toolstripRegions;
+
+        /// <summary>
+        /// Adds the toolbar.
+        /// </summary>
+        /// <param name="name">The name.</param>
+        /// <param name="toolbar">The toolbar.</param>
+        /// <param name="region">The region.</param>
+        /// <param name="canToggleVisibility">if set to <c>true</c> [can toggle visibility].</param>
+        public void AddToolbar(string name, ToolStrip toolbar, ToolbarRegion region, bool canToggleVisibility)
+        {
+            _toolstrips.Add(name, toolbar);
+            _toolstripRegions.Add(name, region);
+
+            if (canToggleVisibility)
+            {
+                ToolStripMenuItem item = new ToolStripMenuItem();
+                item.Text = name;
+                item.Tag = name;
+                item.Checked = true;
+                item.CheckOnClick = true;
+                item.Click += delegate
+                {
+                    SetToolbarVisibility(name, item.Checked);
+                };
+                ctxToolbar.Items.Add(item);
+            }
+
+            switch (region)
+            {
+                case ToolbarRegion.Top:
+                    toolStripContainer.TopToolStripPanel.Controls.Add(toolbar);
+                    break;
+                case ToolbarRegion.Bottom:
+                    toolStripContainer.BottomToolStripPanel.Controls.Add(toolbar);
+                    break;
+                case ToolbarRegion.Left:
+                    toolStripContainer.LeftToolStripPanel.Controls.Add(toolbar);
+                    break;
+                case ToolbarRegion.Right:
+                    toolStripContainer.RightToolStripPanel.Controls.Add(toolbar);
+                    break;
+            }
+        }
+
+        /// <summary>
+        /// Sets the toolbar visibility.
+        /// </summary>
+        /// <param name="toolbarName">Name of the toolbar.</param>
+        /// <param name="visible">if set to <c>true</c> [visible].</param>
+        public void SetToolbarVisibility(string toolbarName, bool visible)
+        {
+            ToolStrip strip = GetToolbar(toolbarName);
+            if (strip != null)
+            {
+                ToolbarRegion region = _toolstripRegions[toolbarName];
+                if (visible)
+                {
+                    switch (region)
+                    {
+                        case ToolbarRegion.Bottom:
+                            toolStripContainer.BottomToolStripPanel.Controls.Add(strip);
+                            break;
+                        case ToolbarRegion.Left:
+                            toolStripContainer.LeftToolStripPanel.Controls.Add(strip);
+                            break;
+                        case ToolbarRegion.Right:
+                            toolStripContainer.RightToolStripPanel.Controls.Add(strip);
+                            break;
+                        case ToolbarRegion.Top:
+                            toolStripContainer.TopToolStripPanel.Controls.Add(strip);
+                            break;
+                    }
+                }
+                else
+                {
+                    switch (region)
+                    {
+                        case ToolbarRegion.Bottom:
+                            toolStripContainer.BottomToolStripPanel.Controls.Remove(strip);
+                            break;
+                        case ToolbarRegion.Left:
+                            toolStripContainer.LeftToolStripPanel.Controls.Remove(strip);
+                            break;
+                        case ToolbarRegion.Right:
+                            toolStripContainer.RightToolStripPanel.Controls.Remove(strip);
+                            break;
+                        case ToolbarRegion.Top:
+                            toolStripContainer.TopToolStripPanel.Controls.Remove(strip);
+                            break;
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// Gets the toolbar.
+        /// </summary>
+        /// <param name="name">The name.</param>
+        /// <returns></returns>
+        public ToolStrip GetToolbar(string name)
+        {
+            if (_toolstrips.ContainsKey(name))
+                return _toolstrips[name];
+            return null;
+        }
+
+        /// <summary>
+        /// Gets the toolbar names.
+        /// </summary>
+        /// <value>The toolbar names.</value>
+        public ICollection<string> ToolbarNames
+        {
+            get { return _toolstrips.Keys; }
+        }
+
+        /// <summary>
+        /// Sets the status label.
+        /// </summary>
+        /// <param name="text">The text.</param>
+        public void SetStatusLabel(string text)
+        {
+            statusLabel.Text = text;
+        }
+
+        /// <summary>
+        /// Sets the title.
+        /// </summary>
+        /// <param name="title">The title.</param>
+        public void SetTitle(string title)
+        {
+            this.Text = title;
+        }
+
+        /// <summary>
+        /// Shows the content.
+        /// </summary>
+        /// <param name="vc">The vc.</param>
+        /// <param name="region">The region.</param>
+        public void ShowContent(IViewContent vc, ViewRegion region)
+        {
+            switch (region)
+            {
+                case ViewRegion.Bottom:
+                case ViewRegion.Left:
+                case ViewRegion.Right:
+                case ViewRegion.Document:
+                    contentPanel.AddContent(vc, region);
+                    break;
+                case ViewRegion.Floating:
+                    throw new NotImplementedException();
+                    break;
+                case ViewRegion.Dialog:
+                    throw new NotImplementedException();
+                    break;
+            }
+        }
+
+        void OnApplicationIdle(object sender, EventArgs e)
+        {
+            // Use the Idle event to update the status of menu and toolbar.
+            // Depending on your application and the number of menu items with complex conditions,
+            // you might want to update the status less frequently.
+            UpdateMenuItemStatus();
+        }
+
+        /// <summary>Update Enabled/Visible state of items in the main menu based on conditions</summary>
+        void UpdateMenuItemStatus()
+        {
+            foreach (ToolStripItem item in menu.Items)
+            {
+                if (item is IStatusUpdate)
+                    (item as IStatusUpdate).UpdateStatus();
+            }
+        }
+
+        /*
+        /// <summary>
+        /// </summary>
+        /// <param name="m"></param>
+        protected override void WndProc(ref Message m)
+        {
+            if (m.Msg == NativeMethods.WM_SHOWME)
+            {
+                if (WindowState == FormWindowState.Minimized)
+                {
+                    WindowState = FormWindowState.Normal;
+                }
+                // get our current "TopMost" value (ours will always be false though)
+                bool top = TopMost;
+                // make our form jump to the top of everything
+                TopMost = true;
+                // set it back to whatever it was
+                TopMost = top;
+            }
+            base.WndProc(ref m);
+        }*/
+    }
+
+    /// <summary>
+    /// Defines the valid regions a toolbar can reside on a workbench
+    /// </summary>
+    public enum ToolbarRegion
+    {
+        /// <summary>
+        /// On the top
+        /// </summary>
+        Top,
+        /// <summary>
+        /// On the left
+        /// </summary>
+        Left,
+        /// <summary>
+        /// On the right
+        /// </summary>
+        Right,
+        /// <summary>
+        /// On the bottom
+        /// </summary>
+        Bottom
+    }
+}

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

Added: sandbox/maestro-2.5/Maestro.Base/ZonedContainer.Designer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/ZonedContainer.Designer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/ZonedContainer.Designer.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,219 @@
+namespace Maestro.Base
+{
+    partial class ZonedContainer
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.topContainer = new System.Windows.Forms.SplitContainer();
+            this.leftZone = new System.Windows.Forms.TabControl();
+            this.leftImgList = new System.Windows.Forms.ImageList(this.components);
+            this.docRightContainer = new System.Windows.Forms.SplitContainer();
+            this.docBottomContainer = new System.Windows.Forms.SplitContainer();
+            this.documentTabs = new System.Windows.Forms.TabControl();
+            this.docImgList = new System.Windows.Forms.ImageList(this.components);
+            this.bottomZone = new System.Windows.Forms.TabControl();
+            this.bottomImgList = new System.Windows.Forms.ImageList(this.components);
+            this.rightZone = new System.Windows.Forms.TabControl();
+            this.rightImgList = new System.Windows.Forms.ImageList(this.components);
+            this.topContainer.Panel1.SuspendLayout();
+            this.topContainer.Panel2.SuspendLayout();
+            this.topContainer.SuspendLayout();
+            this.docRightContainer.Panel1.SuspendLayout();
+            this.docRightContainer.Panel2.SuspendLayout();
+            this.docRightContainer.SuspendLayout();
+            this.docBottomContainer.Panel1.SuspendLayout();
+            this.docBottomContainer.Panel2.SuspendLayout();
+            this.docBottomContainer.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // topContainer
+            // 
+            this.topContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.topContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+            this.topContainer.Location = new System.Drawing.Point(0, 0);
+            this.topContainer.Name = "topContainer";
+            // 
+            // topContainer.Panel1
+            // 
+            this.topContainer.Panel1.Controls.Add(this.leftZone);
+            this.topContainer.Panel1MinSize = 200;
+            // 
+            // topContainer.Panel2
+            // 
+            this.topContainer.Panel2.Controls.Add(this.docRightContainer);
+            this.topContainer.Size = new System.Drawing.Size(626, 444);
+            this.topContainer.SplitterDistance = 200;
+            this.topContainer.TabIndex = 0;
+            // 
+            // leftZone
+            // 
+            this.leftZone.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.leftZone.ImageList = this.leftImgList;
+            this.leftZone.Location = new System.Drawing.Point(0, 0);
+            this.leftZone.Name = "leftZone";
+            this.leftZone.SelectedIndex = 0;
+            this.leftZone.ShowToolTips = true;
+            this.leftZone.Size = new System.Drawing.Size(200, 444);
+            this.leftZone.TabIndex = 0;
+            // 
+            // leftImgList
+            // 
+            this.leftImgList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+            this.leftImgList.ImageSize = new System.Drawing.Size(16, 16);
+            this.leftImgList.TransparentColor = System.Drawing.Color.Transparent;
+            // 
+            // docRightContainer
+            // 
+            this.docRightContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.docRightContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
+            this.docRightContainer.Location = new System.Drawing.Point(0, 0);
+            this.docRightContainer.Name = "docRightContainer";
+            // 
+            // docRightContainer.Panel1
+            // 
+            this.docRightContainer.Panel1.Controls.Add(this.docBottomContainer);
+            this.docRightContainer.Panel1.RightToLeft = System.Windows.Forms.RightToLeft.No;
+            this.docRightContainer.Panel1MinSize = 200;
+            // 
+            // docRightContainer.Panel2
+            // 
+            this.docRightContainer.Panel2.Controls.Add(this.rightZone);
+            this.docRightContainer.Panel2.RightToLeft = System.Windows.Forms.RightToLeft.No;
+            this.docRightContainer.RightToLeft = System.Windows.Forms.RightToLeft.No;
+            this.docRightContainer.Size = new System.Drawing.Size(422, 444);
+            this.docRightContainer.SplitterDistance = 200;
+            this.docRightContainer.TabIndex = 0;
+            // 
+            // docBottomContainer
+            // 
+            this.docBottomContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.docBottomContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+            this.docBottomContainer.Location = new System.Drawing.Point(0, 0);
+            this.docBottomContainer.Name = "docBottomContainer";
+            this.docBottomContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+            // 
+            // docBottomContainer.Panel1
+            // 
+            this.docBottomContainer.Panel1.Controls.Add(this.documentTabs);
+            this.docBottomContainer.Panel1.RightToLeft = System.Windows.Forms.RightToLeft.No;
+            // 
+            // docBottomContainer.Panel2
+            // 
+            this.docBottomContainer.Panel2.Controls.Add(this.bottomZone);
+            this.docBottomContainer.Panel2.RightToLeft = System.Windows.Forms.RightToLeft.No;
+            this.docBottomContainer.Panel2MinSize = 100;
+            this.docBottomContainer.Size = new System.Drawing.Size(200, 444);
+            this.docBottomContainer.SplitterDistance = 314;
+            this.docBottomContainer.TabIndex = 0;
+            // 
+            // documentTabs
+            // 
+            this.documentTabs.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.documentTabs.ImageList = this.docImgList;
+            this.documentTabs.Location = new System.Drawing.Point(0, 0);
+            this.documentTabs.Name = "documentTabs";
+            this.documentTabs.SelectedIndex = 0;
+            this.documentTabs.ShowToolTips = true;
+            this.documentTabs.Size = new System.Drawing.Size(200, 314);
+            this.documentTabs.TabIndex = 0;
+            // 
+            // docImgList
+            // 
+            this.docImgList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+            this.docImgList.ImageSize = new System.Drawing.Size(16, 16);
+            this.docImgList.TransparentColor = System.Drawing.Color.Transparent;
+            // 
+            // bottomZone
+            // 
+            this.bottomZone.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.bottomZone.ImageList = this.bottomImgList;
+            this.bottomZone.Location = new System.Drawing.Point(0, 0);
+            this.bottomZone.Name = "bottomZone";
+            this.bottomZone.SelectedIndex = 0;
+            this.bottomZone.ShowToolTips = true;
+            this.bottomZone.Size = new System.Drawing.Size(200, 126);
+            this.bottomZone.TabIndex = 0;
+            // 
+            // bottomImgList
+            // 
+            this.bottomImgList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+            this.bottomImgList.ImageSize = new System.Drawing.Size(16, 16);
+            this.bottomImgList.TransparentColor = System.Drawing.Color.Transparent;
+            // 
+            // rightZone
+            // 
+            this.rightZone.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.rightZone.ImageList = this.rightImgList;
+            this.rightZone.Location = new System.Drawing.Point(0, 0);
+            this.rightZone.Name = "rightZone";
+            this.rightZone.SelectedIndex = 0;
+            this.rightZone.ShowToolTips = true;
+            this.rightZone.Size = new System.Drawing.Size(218, 444);
+            this.rightZone.TabIndex = 0;
+            // 
+            // rightImgList
+            // 
+            this.rightImgList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+            this.rightImgList.ImageSize = new System.Drawing.Size(16, 16);
+            this.rightImgList.TransparentColor = System.Drawing.Color.Transparent;
+            // 
+            // ZonedContainer
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.topContainer);
+            this.Name = "ZonedContainer";
+            this.Size = new System.Drawing.Size(626, 444);
+            this.topContainer.Panel1.ResumeLayout(false);
+            this.topContainer.Panel2.ResumeLayout(false);
+            this.topContainer.ResumeLayout(false);
+            this.docRightContainer.Panel1.ResumeLayout(false);
+            this.docRightContainer.Panel2.ResumeLayout(false);
+            this.docRightContainer.ResumeLayout(false);
+            this.docBottomContainer.Panel1.ResumeLayout(false);
+            this.docBottomContainer.Panel2.ResumeLayout(false);
+            this.docBottomContainer.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.SplitContainer topContainer;
+        private System.Windows.Forms.SplitContainer docRightContainer;
+        private System.Windows.Forms.SplitContainer docBottomContainer;
+        private System.Windows.Forms.TabControl documentTabs;
+        private System.Windows.Forms.TabControl leftZone;
+        private System.Windows.Forms.TabControl bottomZone;
+        private System.Windows.Forms.TabControl rightZone;
+        private System.Windows.Forms.ImageList leftImgList;
+        private System.Windows.Forms.ImageList rightImgList;
+        private System.Windows.Forms.ImageList docImgList;
+        private System.Windows.Forms.ImageList bottomImgList;
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Base/ZonedContainer.cs
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/ZonedContainer.cs	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/ZonedContainer.cs	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,82 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Maestro.Base
+{
+    internal partial class ZonedContainer : UserControl
+    {
+        public ZonedContainer()
+        {
+            InitializeComponent();
+        }
+
+        protected override void OnLoad(EventArgs e)
+        {
+            base.OnLoad(e);
+            CheckContainerStatus();
+        }
+
+        private void CheckContainerStatus()
+        {
+            docBottomContainer.Panel2Collapsed = (bottomZone.TabPages.Count == 0);
+            topContainer.Panel1Collapsed = (leftZone.TabPages.Count == 0);
+            docRightContainer.Panel2Collapsed = (rightZone.TabPages.Count == 0) ;
+        }
+
+        public void AddContent(IViewContent content, ViewRegion region)
+        {
+            TabControl zone = null;
+            ImageList zoneImgList = null;
+            string key = null;
+            switch (region)
+            {
+                case ViewRegion.Bottom:
+                    zone = bottomZone;
+                    zoneImgList = bottomImgList;
+                    break;
+                case ViewRegion.Document:
+                    zone = documentTabs;
+                    zoneImgList = docImgList;
+                    break;
+                case ViewRegion.Left:
+                    zone = leftZone;
+                    zoneImgList = leftImgList;
+                    break;
+                case ViewRegion.Right:
+                    zone = rightZone;
+                    zoneImgList = rightImgList;
+                    break;
+                default: //Something further up should've handled this
+                    throw new InvalidOperationException("Not zoned content");
+            }
+
+            var page = TabFactory.CreateTab(content, null);
+            zone.TabPages.Add(page);
+            CheckContainerStatus();
+        }
+    }
+}

Added: sandbox/maestro-2.5/Maestro.Base/ZonedContainer.resx
===================================================================
--- sandbox/maestro-2.5/Maestro.Base/ZonedContainer.resx	                        (rev 0)
+++ sandbox/maestro-2.5/Maestro.Base/ZonedContainer.resx	2010-05-11 11:40:15 UTC (rev 4850)
@@ -0,0 +1,132 @@
+<?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="leftImgList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="docImgList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>227, 17</value>
+  </metadata>
+  <metadata name="bottomImgList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>332, 17</value>
+  </metadata>
+  <metadata name="rightImgList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>122, 17</value>
+  </metadata>
+</root>
\ No newline at end of file



More information about the mapguide-commits mailing list