[mapguide-commits] r7155 - in trunk/Tools/Maestro: Maestro.Base SDK SDK/Samples SDK/Samples/HelloAddIn SDK/Samples/HelloAddIn/Commands SDK/Samples/HelloAddIn/Properties SDK/Samples/HelloAddIn/Services

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Oct 25 05:13:58 PDT 2012


Author: jng
Date: 2012-10-25 05:13:57 -0700 (Thu, 25 Oct 2012)
New Revision: 7155

Added:
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/InvokeExampleServiceCommand.cs
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/NewDocumentCommand.cs
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedDocumentCommand.cs
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedDocumentsCommand.cs
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedFolderCommand.cs
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedFoldersCommand.cs
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedMixedCommand.cs
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/StartupCommand.cs
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/DocumentView.Designer.cs
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/DocumentView.cs
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/DocumentView.resx
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/HelloAddIn.csproj
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Manifest.addin
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Properties/
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Properties/AssemblyInfo.cs
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Readme.txt
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Services/
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Services/ExampleService.cs
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/SidePanel.Designer.cs
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/SidePanel.cs
   trunk/Tools/Maestro/SDK/Samples/HelloAddIn/SidePanel.resx
Modified:
   trunk/Tools/Maestro/Maestro.Base/Maestro.Base.csproj
   trunk/Tools/Maestro/SDK/
   trunk/Tools/Maestro/SDK/Samples/Samples.sln
Log:
#2138: Add a basic example add-in demonstrating how one is made and can integrate with Maestro's extension points. Also make Maestro.Base generate an XML documentation file

Modified: trunk/Tools/Maestro/Maestro.Base/Maestro.Base.csproj
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Maestro.Base.csproj	2012-10-25 06:26:10 UTC (rev 7154)
+++ trunk/Tools/Maestro/Maestro.Base/Maestro.Base.csproj	2012-10-25 12:13:57 UTC (rev 7155)
@@ -43,6 +43,8 @@
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>pdbonly</DebugType>
@@ -51,6 +53,7 @@
     <DefineConstants>TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+    <DocumentationFile>..\out\Release\Maestro.Base.XML</DocumentationFile>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="Microsoft.CSharp" />
@@ -707,6 +710,16 @@
   </ItemGroup>
   <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>if not exist "$(TargetDir)..\..\SDK\addin-bin" md "$(TargetDir)..\..\SDK\addin-bin"
+copy /Y "$(TargetDir)$(TargetName)$(TargetExt)" "$(TargetDir)..\..\SDK\addin-bin\"
+if exist "$(TargetDir)$(TargetName).xml" copy /Y "$(TargetDir)$(TargetName).xml" "$(TargetDir)..\..\SDK\addin-bin\"
+if exist "$(TargetDir)$(TargetName).pdb" copy /Y "$(TargetDir)$(TargetName).pdb" "$(TargetDir)..\..\SDK\addin-bin\"
+copy /Y "$(TargetDir)ICSharpCode.Core.dll" "$(TargetDir)..\..\SDK\addin-bin\"
+if exist "$(TargetDir)ICSharpCode.Core.pdb" copy /Y "$(TargetDir)ICSharpCode.Core.pdb" "$(TargetDir)..\..\SDK\addin-bin\"
+copy /Y "$(TargetDir)ICSharpCode.Core.WinForms.dll" "$(TargetDir)..\..\SDK\addin-bin\"
+if exist "$(TargetDir)ICSharpCode.Core.WinForms.pdb" copy /Y "$(TargetDir)ICSharpCode.Core.WinForms.pdb" "$(TargetDir)..\..\SDK\addin-bin\"</PostBuildEvent>
+  </PropertyGroup>
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
   <Target Name="BeforeBuild">


Property changes on: trunk/Tools/Maestro/SDK
___________________________________________________________________
Modified: svn:ignore
   - SDK.suo
bin
*.cache
LocalNativeProvider

   + *.cache
LocalNativeProvider
SDK.suo
addin-bin
bin



Property changes on: trunk/Tools/Maestro/SDK/Samples/HelloAddIn
___________________________________________________________________
Added: bugtraq:number
   + true


Property changes on: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands
___________________________________________________________________
Added: bugtraq:number
   + true

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/InvokeExampleServiceCommand.cs
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/InvokeExampleServiceCommand.cs	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/InvokeExampleServiceCommand.cs	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using ICSharpCode.Core;
+using Maestro.Base.Services;
+using HelloAddIn.Services;
+
+namespace HelloAddIn.Commands
+{
+    public class InvokeExampleServiceCommand : AbstractMenuCommand
+    {
+        public override void Run()
+        {
+            //Services can be accessed via the ServiceRegistry utility class
+            //Any service class registered under the /Maestro/ApplicationServices
+            //extension point can be accessed via this class
+            var service = ServiceRegistry.GetService<ExampleService>();
+            service.Test();
+        }
+    }
+}

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/NewDocumentCommand.cs
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/NewDocumentCommand.cs	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/NewDocumentCommand.cs	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using ICSharpCode.Core;
+using Maestro.Base.Services;
+
+namespace HelloAddIn.Commands
+{
+    public class NewDocumentCommand : AbstractMenuCommand
+    {
+        public override void Run()
+        {
+            //The ViewContentManager class is the class responsible for managing the display of view content.
+            //
+            //It has been registered under the /Maestro/ApplicationServices extension point, thus it is available
+            //via the ServiceRegistry utility class
+            //
+            //When working with resource editor view content, avoid using the ViewContentManager to spawn editor
+            //instances, use the OpenResourceManager service instead.
+            var mgr = ServiceRegistry.GetService<ViewContentManager>();
+
+            mgr.OpenContent(Maestro.Shared.UI.ViewRegion.Document, () => { 
+                return new DocumentView(); 
+            });
+        }
+    }
+}

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedDocumentCommand.cs
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedDocumentCommand.cs	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedDocumentCommand.cs	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using ICSharpCode.Core;
+using Maestro.Base;
+
+namespace HelloAddIn.Commands
+{
+    public class SelectedDocumentCommand : AbstractMenuCommand
+    {
+        public override void Run()
+        {
+            //The workbench represents the main window
+            //
+            //There's only going to be ever one main window so you access it via the Instance static property
+            var wb = Workbench.Instance;
+
+            //The Site Explorer is attached to the main workbench, which can be accessed via the ActiveSiteExplorer property
+            var siteExp = wb.ActiveSiteExplorer;
+
+            //If this command was registered under the /Maestro/Shell/SiteExplorer/SelectedDocument extension point you will
+            //only ever get one selected item. However if this command was registered under other extension points, this may
+            //not be the case, so as good practice you should always check your pre-conditions before continuing. In our case, 
+            //we require a single document be selected in the Site Explorer
+            var items = siteExp.SelectedItems;
+            if (items.Length == 1)
+            {
+                var item = items[0];
+                if (!item.IsFolder)
+                {
+                    MessageService.ShowMessageFormatted("Selected document", "Selected {0}", item.ResourceId);
+                }
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedDocumentsCommand.cs
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedDocumentsCommand.cs	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedDocumentsCommand.cs	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Maestro.Base;
+using ICSharpCode.Core;
+
+namespace HelloAddIn.Commands
+{
+    public class SelectedDocumentsCommand : AbstractMenuCommand
+    {
+        public override void Run()
+        {
+            //The workbench represents the main window
+            //
+            //There's only going to be ever one main window so you access it via the Instance static property
+            var wb = Workbench.Instance;
+
+            //The Site Explorer is attached to the main workbench, which can be accessed via the ActiveSiteExplorer property
+            var siteExp = wb.ActiveSiteExplorer;
+
+            //If this command was registered under the /Maestro/Shell/SiteExplorer/SelectedDocuments extension point you will
+            //only ever get more than one selected item. However if this command was registered under other extension points, this may
+            //not be the case, so as good practice you should always check your pre-conditions before continuing. In our case, 
+            //we require more than one document be selected in the Site Explorer
+            var items = siteExp.SelectedItems;
+            if (items.Length > 1)
+            {
+                MessageService.ShowMessageFormatted("Selected documents", "Selected {0}", string.Join(Environment.NewLine, 
+                    items.Where(x => !x.IsFolder)
+                         .Select(x => x.ResourceId)
+                         .ToArray()));
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedFolderCommand.cs
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedFolderCommand.cs	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedFolderCommand.cs	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using ICSharpCode.Core;
+using Maestro.Base;
+
+namespace HelloAddIn.Commands
+{
+    public class SelectedFolderCommand : AbstractMenuCommand
+    {
+        public override void Run()
+        {
+            //The workbench represents the main window
+            //
+            //There's only going to be ever one main window so you access it via the Instance static property
+            var wb = Workbench.Instance;
+
+            //The Site Explorer is attached to the main workbench, which can be accessed via the ActiveSiteExplorer property
+            var siteExp = wb.ActiveSiteExplorer;
+
+            //If this command was registered under the /Maestro/Shell/SiteExplorer/SelectedFolder extension point you will
+            //only ever get one selected item. However if this command was registered under other extension points, this may
+            //not be the case, so as good practice you should always check your pre-conditions before continuing. In our case, 
+            //we require a single folder be selected in the Site Explorer
+            var items = siteExp.SelectedItems;
+            if (items.Length == 1)
+            {
+                var item = items[0];
+                if (item.IsFolder)
+                {
+                    MessageService.ShowMessageFormatted("Selected folder", "Selected {0}", item.ResourceId);
+                }
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedFoldersCommand.cs
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedFoldersCommand.cs	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedFoldersCommand.cs	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using ICSharpCode.Core;
+using Maestro.Base;
+
+namespace HelloAddIn.Commands
+{
+    public class SelectedFoldersCommand : AbstractMenuCommand
+    {
+        public override void Run()
+        {
+            //The workbench represents the main window
+            //
+            //There's only going to be ever one main window so you access it via the Instance static property
+            var wb = Workbench.Instance;
+
+            //The Site Explorer is attached to the main workbench, which can be accessed via the ActiveSiteExplorer property
+            var siteExp = wb.ActiveSiteExplorer;
+
+            //If this command was registered under the /Maestro/Shell/SiteExplorer/SelectedFolders extension point you will
+            //only ever get more than one selected item. However if this command was registered under other extension points, this may
+            //not be the case, so as good practice you should always check your pre-conditions before continuing. In our case, 
+            //we require more than one folder be selected in the Site Explorer
+            var items = siteExp.SelectedItems;
+            if (items.Length > 1)
+            {
+                MessageService.ShowMessageFormatted("Selected folders", "Selected {0}", string.Join(Environment.NewLine,
+                    items.Where(x => x.IsFolder)
+                         .Select(x => x.ResourceId)
+                         .ToArray()));
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedMixedCommand.cs
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedMixedCommand.cs	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/SelectedMixedCommand.cs	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using ICSharpCode.Core;
+using Maestro.Base;
+
+namespace HelloAddIn.Commands
+{
+    public class SelectedMixedCommand : AbstractMenuCommand
+    {
+        public override void Run()
+        {
+            //The workbench represents the main window
+            //
+            //There's only going to be ever one main window so you access it via the Instance static property
+            var wb = Workbench.Instance;
+
+            //The Site Explorer is attached to the main workbench, which can be accessed via the ActiveSiteExplorer property
+            var siteExp = wb.ActiveSiteExplorer;
+
+            //If this command was registered under the /Maestro/Shell/SiteExplorer/SelectedMixedResources extension point you will
+            //only ever get one selected item. However if this command was registered under other extension points, this may
+            //not be the case, so as good practice you should always check your pre-conditions before continuing. In our case, 
+            //we require multiple items be selected in the Site Explorer
+            var items = siteExp.SelectedItems;
+            if (items.Length > 1)
+            {
+                MessageService.ShowMessageFormatted("Selected mixed", "Selected {0} documents and {1} folders", items.Count(x => !x.IsFolder), items.Count(x => x.IsFolder));
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/StartupCommand.cs
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/StartupCommand.cs	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Commands/StartupCommand.cs	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using ICSharpCode.Core;
+using Maestro.Base.Services;
+using Maestro.Shared.UI;
+using Maestro.Base;
+
+namespace HelloAddIn.Commands
+{
+    public class StartupCommand : AbstractCommand
+    {
+        public override void Run()
+        {
+            /*
+             Startup commands are run as part of application startup, but before the Workbench (main window) has yet to be fully initialized
+             as such, it is generally recommended to execute your startup logic after the workbench has been initialized as all the required
+             application services will be ready by then
+             */
+            Workbench.WorkbenchInitialized += (sender, e) =>
+            {
+                MessageService.ShowMessage("If you see this message, it means the AddIn infrastructure has successfully loaded this add-in and is executing this add-in's startup command");
+                //The ViewContentManager class is the class responsible for managing the display of view content.
+                //
+                //It has been registered under the /Maestro/ApplicationServices extension point, thus it is available
+                //via the ServiceRegistry utility class
+                //
+                //When working with resource editor view content, avoid using the ViewContentManager to spawn editor
+                //instances, use the OpenResourceManager service instead.
+                var mgr = ServiceRegistry.GetService<ViewContentManager>();
+
+                //Show the side panel to the right
+                mgr.OpenContent<SidePanel>(ViewRegion.Right);
+            };
+        }
+    }
+}

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/DocumentView.Designer.cs
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/DocumentView.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/DocumentView.Designer.cs	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,62 @@
+namespace HelloAddIn
+{
+    partial class DocumentView
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.label1 = new System.Windows.Forms.Label();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.label1.Location = new System.Drawing.Point(19, 18);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(421, 419);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "I\'m an example Document View\r\n\r\nDocument views are tabbed\r\n\r\nBecuase I inherit fr" +
+    "om ViewContentBase (and not SingletonViewContent), you can spawn many instances " +
+    "of me";
+            // 
+            // DocumentView
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.label1);
+            this.Name = "DocumentView";
+            this.Size = new System.Drawing.Size(459, 460);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+    }
+}

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/DocumentView.cs
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/DocumentView.cs	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/DocumentView.cs	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using Maestro.Shared.UI;
+
+namespace HelloAddIn
+{
+    public partial class DocumentView : ViewContentBase
+    {
+        static int counter = 0;
+
+        public DocumentView()
+        {
+            InitializeComponent();
+        }
+
+        protected override void OnLoad(EventArgs e)
+        {
+            base.OnLoad(e);
+            this.Title = "Document " + (++counter);
+        }
+
+        public override ViewRegion DefaultRegion
+        {
+            get
+            {
+                return ViewRegion.Document;
+            }
+        }
+    }
+}

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

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/HelloAddIn.csproj
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/HelloAddIn.csproj	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/HelloAddIn.csproj	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{14855B2E-56F6-48C9-B982-E2A8CE29DECC}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HelloAddIn</RootNamespace>
+    <AssemblyName>HelloAddIn</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\HelloAddIn\</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>bin\Release\HelloAddIn\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Accessibility">
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </Reference>
+    <Reference Include="ICSharpCode.Core">
+      <HintPath>..\..\addin-bin\ICSharpCode.Core.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="ICSharpCode.Core.WinForms">
+      <HintPath>..\..\addin-bin\ICSharpCode.Core.WinForms.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Maestro.Base">
+      <HintPath>..\..\addin-bin\Maestro.Base.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Maestro.Shared.UI">
+      <HintPath>..\..\bin\Maestro.Shared.UI.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="OSGeo.MapGuide.MaestroAPI">
+      <HintPath>..\..\bin\OSGeo.MapGuide.MaestroAPI.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Commands\InvokeExampleServiceCommand.cs" />
+    <Compile Include="Commands\NewDocumentCommand.cs" />
+    <Compile Include="Commands\SelectedDocumentCommand.cs" />
+    <Compile Include="Commands\SelectedDocumentsCommand.cs" />
+    <Compile Include="Commands\SelectedFolderCommand.cs" />
+    <Compile Include="Commands\SelectedFoldersCommand.cs" />
+    <Compile Include="Commands\SelectedMixedCommand.cs" />
+    <Compile Include="Commands\StartupCommand.cs" />
+    <Compile Include="DocumentView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DocumentView.Designer.cs">
+      <DependentUpon>DocumentView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Services\ExampleService.cs" />
+    <Compile Include="SidePanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SidePanel.Designer.cs">
+      <DependentUpon>SidePanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Service Include="{94E38DFF-614B-4cbd-B67C-F211BB35CE8B}" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="DocumentView.resx">
+      <DependentUpon>DocumentView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SidePanel.resx">
+      <DependentUpon>SidePanel.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Manifest.addin">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Readme.txt" />
+  </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: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Manifest.addin
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Manifest.addin	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Manifest.addin	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+Manifest.addin
+
+This is the addin manifest that SharpDevelop Core will look for in each addin directory. This contains important information about the
+addin and how various aspects of the addin will integrate into the main Maestro application.
+
+-->
+<AddIn name="HelloAddIn"
+       author="Jackie Ng"
+       url="http://trac.osgeo.org/mapguide/wiki/maestro"
+       description="Maestro Sample Add-In">
+
+    <Manifest>
+        <!-- Change this to match the name of your assembly -->
+        <Identity name="HelloAddIn" />
+    </Manifest>
+
+    <Runtime>
+        <Import assembly=":Maestro.Base" />
+        <!-- Change this to match the output assembly name of your add-in (with dll extension) -->
+        <Import assembly="HelloAddIn.dll" />
+    </Runtime>
+
+    <!--
+    Maestro Add-In anatomy
+    
+    Maestro exposes a whole series of extension points, these extension points are indicated by the <Path>
+    element.
+    
+    When Maestro loads all the add-ins it can find, it creates a merged AddIn registry of all these extension
+    points and their merged contents. Any class registered here can be instantiated by the AddIn registry.
+    
+    Classes that are registered must use the fully qualified name.
+    
+    Maestro offers the following extension points:
+    
+     /Maestro/ApplicationServices
+        - Register application-level service classes
+        
+     /Maestro/Shell/MainMenu
+        - Register commands to be merged into Maestro's main menu
+        
+     /Maestro/Shell/SingleViewContent
+        - Register single-instance view classes
+        
+     /Maestro/Shell/Toolbars/Main
+        - Register commands to be merged into Maestro's main toolbar
+        
+     /Maestro/Shell/SiteExplorer/Toolbar
+        - Register commands to be merged into the Site Explorer's toolbar
+        
+     /Maestro/Shell/SiteExplorer/SelectedFolder
+        - Register commands to be merged into the Site Explorer context menu for a selected folder. These are usually commands that operate on a single folder selected in the site explorer
+        
+     /Maestro/Shell/SiteExplorer/SelectedFolders
+        - Register commands to be merged into the Site Explorer context menu for selected folders. These are usually commands that operate on multiple folders selected in the site explorer
+        
+     /Maestro/Shell/SiteExplorer/SelectedDocument
+        - Register commands to be merged into the Site Explorer context menu for a selected document. These are usually commands that operate on a single document selected in the site explorer
+        
+     /Maestro/Shell/SiteExplorer/SelectedDocuments
+        - Register commands to be merged into the Site Explorer context menu for selected documents. These are usually commands that operate on multiple documents selected in the site explorer
+        
+     /Maestro/Shell/SiteExplorer/SelectedMixedResources
+        - Register commands to be merged into the Site Explorer context menu for multiple selected itmes. These are usually commands that operate on a multiple selected items in the site explorer
+        
+     /Workspace/Tools
+        - Register commands to be registered under Maestro's "Tools" menu
+        
+     /Workspace/Autostart
+        - Register commands to be executed on application startup (after add-ins have been loaded)
+        
+    Other add-ins may offer their own extension points, which you will have to consult their respective documentation
+    
+    WARNING: You must get the class names correct here. If you change them due to things like refactoring, you must update the matching names here, otherwise
+    the SharpDevelop Core will raise a warning about this (which is a good thing in a sense)
+    -->
+    
+    <!-- 
+    Application-level services 
+    
+    Register any application-level services here. Such classes must inherit from Maestro.Shared.UI.ServiceBase
+    Maestro will auto-instantiate any classes here to be available for consumption via the ServiceRegistry utility
+    class
+    -->
+    <Path name="/Maestro/ApplicationServices">
+        <Class id="ExampleService" class="HelloAddIn.Services.ExampleService" />
+    </Path>
+
+    <!-- 
+    Singleton view content classes
+    
+    Register any single-instance view content here. Such classes must inherit from Maestro.Shared.UI.SingletonViewContent
+    -->
+    <Path name="/Maestro/Shell/SingleViewContent">
+        <Class id="SidePanel" class="HelloAddIn.SidePanel" />
+    </Path>
+
+    <!-- 
+    Auto-start commands
+    
+    Register any command classes which will be executed on application startup (after all add-ins have been loaded). Such classes
+    must inherit from ICSharpCode.Core.AbstractCommand
+    -->
+    <Path name="/Workspace/Autostart">
+        <Class id="Startup" class="HelloAddIn.Commands.StartupCommand" />
+    </Path>
+
+    <!--
+    Maestro main menu
+    
+    Items declared here will be merged into Maestro's main menu, any sub menus will be merged as well
+    -->
+    <Path name="/Maestro/Shell/MainMenu">
+        <!-- This declares a top-level sub-menu labelled "Hello AddIn" -->
+        <MenuItem id="Menu_Hello"
+                  type="Menu"
+                  label="Hello AddIn">
+            <MenuItem id="Test"
+                      label="Invoke Example Service Command"
+                      class="HelloAddIn.Commands.InvokeExampleServiceCommand" />
+            <MenuItem id="NewDocument"
+                      label="New Document Command"
+                      class="HelloAddIn.Commands.NewDocumentCommand" />
+        </MenuItem>
+    </Path>
+
+    <!-- Site Explorer Context Menu (single document selected) -->
+    <Path name="/Maestro/Shell/SiteExplorer/SelectedDocument">
+        <MenuItem id="SelectedDocument"
+                  label="Selected Document Command"
+                  class="HelloAddIn.Commands.SelectedDocumentCommand" />
+    </Path>
+
+    <!-- Site Explorer Context Menu (multiple documents selected) -->
+    <Path name="/Maestro/Shell/SiteExplorer/SelectedDocuments">
+        <MenuItem id="SelectedDocuments"
+                  label="Selected Documents Command"
+                  class="HelloAddIn.Commands.SelectedDocumentsCommand" />
+    </Path>
+
+    <!-- Site Explorer Context Menu (single folder selected) -->
+    <Path name="/Maestro/Shell/SiteExplorer/SelectedFolder">
+        <MenuItem id="SelectedFolder"
+                  label="Selected Folder Command"
+                  class="HelloAddIn.Commands.SelectedFolderCommand" />
+    </Path>
+
+    <!-- Site Explorer Context Menu (multiple folders selected) -->
+    <Path name="/Maestro/Shell/SiteExplorer/SelectedFolders">
+        <MenuItem id="SelectedFolders"
+                  label="Selected Folders Command"
+                  class="HelloAddIn.Commands.SelectedFoldersCommand" />
+    </Path>
+
+    <!-- Site Explorer Context Menu (multiple items selected) -->
+    <Path name="/Maestro/Shell/SiteExplorer/SelectedMixedResources">
+        <MenuItem id="SelectedMixed"
+                  label="Selected Mixed Command"
+                  class="HelloAddIn.Commands.SelectedMixedCommand" />
+    </Path>
+</AddIn>


Property changes on: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Properties
___________________________________________________________________
Added: bugtraq:number
   + true

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Properties/AssemblyInfo.cs
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Properties/AssemblyInfo.cs	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Properties/AssemblyInfo.cs	2012-10-25 12:13:57 UTC (rev 7155)
@@ -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("HelloAddIn")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HelloAddIn")]
+[assembly: AssemblyCopyright("Copyright ©  2012")]
+[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("2c0463d1-8c3e-489f-8e2b-6bcdd451d2be")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Readme.txt
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Readme.txt	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Readme.txt	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,66 @@
+HelloAddIn README
+=================
+
+HelloAddIn is an example of an add-in for MapGuide Maestro.
+
+AddIns extend the functionality of MapGuide Maestro
+
+Anatomy of a Maestro AddIn
+==========================
+
+A Maestro AddIn consists of the following files:
+
+ - The AddIn assembly and its supporting libraries
+ - The AddIn manifest file (with a .addin extension)
+
+The AddIn manifest describes the addin and the extension points that it will integrate into. See the Manifest.addin for more information
+
+Supporting Libraries
+====================
+
+A Maestro AddIn requires referencing the following assemblies:
+
+ - Maestro.Base (Your Maestro directory or under addin-bin in the SDK)
+ - ICSharpCode.Core (Your Maestro directory or under addin-bin in the SDK)
+ - ICSharpCode.Core.WinForms (Your Maestro directory or under addin-bin in the SDK)
+ - Maestro.Shared.UI (Your Maestro directory or under bin in the SDK)
+
+Additionally, you will most likely want to reference these libraries as well in order to tap into some of the shared components used by Maestro:
+
+ - OSGeo.MapGuide.MaestroAPI (Your Maestro directory or under bin in the SDK)
+ - Maestro.Editors (Your Maestro directory or under bin in the SDK)
+ - Maestro.Login (Your Maestro directory or under bin in the SDK)
+
+All of these aforementioned libraries do not have to be included with your final addin project output. To reduce deployment footprint, set these references to <Copy Local = false>
+so that these references won't be copied to your project's output directory
+
+Debugging your AddIn project
+============================
+
+To debug your add-in project, it is recommended for your project to have the following settings:
+
+ - Build: Output Directory: <your maestro directory>\AddIns\<Your AddIn name>
+ - Debug:
+	- Start External Program: <your maestro directory>\Maestro.exe
+	- Working Directory: <your maestro directory>
+
+Debugging this project will launch Maestro and attach the VS debugger to it.
+
+AddIn Packaging/Deployment
+==========================
+
+There are many ways to package and deploy your add-in:
+
+ 1. Copying your addin directory to <your maestro directory>\AddIns
+ 2. Zipping your addin directory and installing this zip file via Maestro's AddIn Manager
+
+Method #1 is okay as long as <your maestro directory> is not under Program Files as this directory is extremely locked down in Windows Vista and newer (due to UAC). If you installed Maestro via the Windows installer, then this is not a viable method of deployment. Uninstallation is a case of deleting this addin directory
+
+Method #2 is the preferred method as such addins will be installed to a safe location that is UAC compatible (addins are generally installed to: %APPDATA%\Maestro-5.0)
+
+AddIn installations and uninstallations via Maestro's AddIn Manager require a restart to take effect
+
+Other AddIn notes
+=================
+
+Your addin project cannot be 64-bit or consume 64-bit libraries. It must either be x86 or AnyCPU. This is because Maestro.exe is a 32-bit application, and thus can only load 32-bit or AnyCPU assemblies.
\ No newline at end of file


Property changes on: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Services
___________________________________________________________________
Added: bugtraq:number
   + true

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Services/ExampleService.cs
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Services/ExampleService.cs	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/Services/ExampleService.cs	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Maestro.Shared.UI;
+using System.Windows.Forms;
+using ICSharpCode.Core;
+
+namespace HelloAddIn.Services
+{
+    public class ExampleService : ServiceBase
+    {
+        public void Test()
+        {
+            MessageService.ShowMessage("You invoked an application-service method");
+        }
+    }
+}

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/SidePanel.Designer.cs
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/SidePanel.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/SidePanel.Designer.cs	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,103 @@
+namespace HelloAddIn
+{
+    partial class SidePanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.label1 = new System.Windows.Forms.Label();
+            this.btnOpenEditor = new System.Windows.Forms.Button();
+            this.btnValidate = new System.Windows.Forms.Button();
+            this.label2 = new System.Windows.Forms.Label();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.label1.Location = new System.Drawing.Point(23, 22);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(202, 117);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "If you can see this sidebar (and the \"Hello AddIn\" menu), it means this AddIn was" +
+    " successfully loaded into Maestro :)";
+            // 
+            // btnOpenEditor
+            // 
+            this.btnOpenEditor.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnOpenEditor.Location = new System.Drawing.Point(26, 245);
+            this.btnOpenEditor.Name = "btnOpenEditor";
+            this.btnOpenEditor.Size = new System.Drawing.Size(199, 23);
+            this.btnOpenEditor.TabIndex = 1;
+            this.btnOpenEditor.Text = "Edit Selected Item";
+            this.btnOpenEditor.UseVisualStyleBackColor = true;
+            this.btnOpenEditor.Click += new System.EventHandler(this.btnOpenEditor_Click);
+            // 
+            // btnValidate
+            // 
+            this.btnValidate.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnValidate.Location = new System.Drawing.Point(26, 274);
+            this.btnValidate.Name = "btnValidate";
+            this.btnValidate.Size = new System.Drawing.Size(199, 23);
+            this.btnValidate.TabIndex = 2;
+            this.btnValidate.Text = "Validate Selected Item";
+            this.btnValidate.UseVisualStyleBackColor = true;
+            this.btnValidate.Click += new System.EventHandler(this.btnValidate_Click);
+            // 
+            // label2
+            // 
+            this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.label2.Location = new System.Drawing.Point(26, 163);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(199, 55);
+            this.label2.TabIndex = 3;
+            this.label2.Text = "An assortment of various examples demonstrating host application interaction";
+            // 
+            // SidePanel
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.btnValidate);
+            this.Controls.Add(this.btnOpenEditor);
+            this.Controls.Add(this.label1);
+            this.Name = "SidePanel";
+            this.Size = new System.Drawing.Size(251, 564);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Button btnOpenEditor;
+        private System.Windows.Forms.Button btnValidate;
+        private System.Windows.Forms.Label label2;
+    }
+}

Added: trunk/Tools/Maestro/SDK/Samples/HelloAddIn/SidePanel.cs
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/HelloAddIn/SidePanel.cs	                        (rev 0)
+++ trunk/Tools/Maestro/SDK/Samples/HelloAddIn/SidePanel.cs	2012-10-25 12:13:57 UTC (rev 7155)
@@ -0,0 +1,212 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using Maestro.Shared.UI;
+using Maestro.Base.UI;
+using Maestro.Base;
+using Maestro.Base.Services;
+using ICSharpCode.Core;
+using OSGeo.MapGuide.MaestroAPI.Resource;
+using OSGeo.MapGuide.MaestroAPI.Resource.Validation;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.MaestroAPI.Exceptions;
+using OSGeo.MapGuide.ObjectModels.Common;
+
+namespace HelloAddIn
+{
+    public partial class SidePanel : SingletonViewContent
+    {
+        public SidePanel()
+        {
+            InitializeComponent();
+            this.Title = "Side Panel";
+        }
+
+        private ISiteExplorer _siteExplorer;
+
+        protected override void OnLoad(EventArgs e)
+        {
+            base.OnLoad(e);
+            _siteExplorer = Workbench.Instance.ActiveSiteExplorer;
+            _siteExplorer.ItemsSelected += new RepositoryItemEventHandler(OnItemsSelected);
+            CheckButtonState(new RepositoryItem[0]);
+        }
+
+        void OnItemsSelected(object sender, RepositoryItem[] items)
+        {
+            CheckButtonState(items);
+        }
+
+        private void CheckButtonState(RepositoryItem[] items)
+        {
+            btnOpenEditor.Enabled = false;
+            btnValidate.Enabled = false;
+
+            if (items.Length == 1)
+            {
+                btnOpenEditor.Enabled = (!items[0].IsFolder);
+                btnValidate.Enabled = true;
+            }
+        }
+
+        /// <summary>
+        /// Gets the default preferred region this view will "dock" to. For this example we prefer the view docks
+        /// to the right
+        /// </summary>
+        public override ViewRegion DefaultRegion
+        {
+            get
+            {
+                return ViewRegion.Right;
+            }
+        }
+
+        private void btnOpenEditor_Click(object sender, EventArgs e)
+        {
+            //ServerConnectionManager manages the open site connections
+            var connMgr = ServiceRegistry.GetService<ServerConnectionManager>();
+
+            //OpenResourceManager manages the display of resource editor views. This is strongly recommended over using the
+            //ViewContentManager as it knows about what type of editor to create, if it is already open (which in that case
+            //it will activate that instance instead), and knowing whether to fall-back to a generic XML editor (for unknown
+            //resource types and/or unsupported schema versions)
+            var openMgr = ServiceRegistry.GetService<OpenResourceManager>();
+
+            //The connection name property of the Site Explorer gives us the name of the active connection. The active connection
+            //is the connection that the selected item belongs to.
+            string connName = _siteExplorer.ConnectionName;
+
+            //We use the connection name to obtain the IServerConnection instance from the ServerConnectionManager
+            var conn = connMgr.GetConnection(connName);
+
+            //We normally shouldn't dive in like this (ie. We should check the number of items and if it's the valid type
+            //but we already validated this condition in OnItemsSelected, meaning when this method executes, this next line
+            //should never be illegal.
+            var resId = _siteExplorer.SelectedItems[0].ResourceId;
+
+            openMgr.Open(resId, conn, false, _siteExplorer);
+        }
+
+        protected object BackgroundValidate(BackgroundWorker worker, DoWorkEventArgs e, params object[] args)
+        {
+            //Collect all documents to be validated. Some of these selected items
+            //may be folders.
+            var documents = new List<string>();
+            var conn = (IServerConnection)args[0];
+            foreach (object a in args.Skip(1))
+            {
+                string rid = a.ToString();
+                if (ResourceIdentifier.Validate(rid))
+                {
+                    var resId = new ResourceIdentifier(rid);
+                    if (resId.IsFolder)
+                    {
+                        foreach (IRepositoryItem o in conn.ResourceService.GetRepositoryResources(rid).Children)
+                        {
+                            if (!o.IsFolder)
+                            {
+                                documents.Add(o.ResourceId);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        documents.Add(rid);
+                    }
+                }
+            }
+
+            worker.ReportProgress(0);
+            var context = new ResourceValidationContext(conn.ResourceService, conn.FeatureService);
+
+            var set = new ValidationResultSet();
+            int i = 0;
+            foreach (string s in documents)
+            {
+                worker.ReportProgress((int)((i / (double)documents.Count) * 100), s);
+                IResource item = null;
+                try
+                {
+                    item = conn.ResourceService.GetResource(s);
+                    set.AddIssues(ResourceValidatorSet.Validate(context, item, true));
+                }
+                catch (Exception ex)
+                {
+                    string msg = NestedExceptionMessageProcessor.GetFullMessage(ex);
+                    set.AddIssue(new ValidationIssue(item, ValidationStatus.Error, ValidationStatusCode.Error_General_ValidationError, string.Format("Failed to validate resource: {0}", msg)));
+                }
+                i++;
+                worker.ReportProgress((int)((i / (double)documents.Count) * 100), s);
+            }
+
+            return set.GetAllIssues();
+        }
+
+        private void btnValidate_Click(object sender, EventArgs e)
+        {
+            var wb = Workbench.Instance;
+            var items = wb.ActiveSiteExplorer.SelectedItems;
+            var connMgr = ServiceRegistry.GetService<ServerConnectionManager>();
+            var conn = connMgr.GetConnection(wb.ActiveSiteExplorer.ConnectionName);
+
+            if (items.Length > 0)
+            {
+                var pdlg = new ProgressDialog();
+                pdlg.CancelAbortsThread = true;
+
+                object[] args = new object[items.Length + 1];
+                args[0] = conn;
+                for (int i = 0; i < items.Length; i++)
+                {
+                    args[i+1] = items[i].ResourceId;
+                }
+
+                var issues = (ValidationIssue[])pdlg.RunOperationAsync(wb, new ProgressDialog.DoBackgroundWork(BackgroundValidate), args);
+
+                CollectAndDisplayIssues(issues);
+            }
+        }
+
+        static void CollectAndDisplayIssues(ValidationIssue[] issues)
+        {
+            if (issues != null)
+            {
+                if (issues.Length > 0)
+                {
+                    //Sigh! LINQ would've made this code so simple...
+
+                    var sort = new Dictionary<string, List<ValidationIssue>>();
+                    foreach (var issue in issues)
+                    {
+                        string resId = issue.Resource.ResourceID;
+                        if (!sort.ContainsKey(resId))
+                            sort[resId] = new List<ValidationIssue>();
+
+                        sort[resId].Add(issue);
+                    }
+
+                    var groupedIssues = new List<KeyValuePair<string, ValidationIssue[]>>();
+                    foreach (var kvp in sort)
+                    {
+                        groupedIssues.Add(
+                            new KeyValuePair<string, ValidationIssue[]>(
+                                kvp.Key,
+                                kvp.Value.ToArray()));
+                    }
+
+                    var resDlg = new ValidationResultsDialog(groupedIssues);
+                    resDlg.Show();
+                }
+                else
+                {
+                    MessageService.ShowMessage("No validation issues found");
+                }
+            }
+        }
+    }
+}

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

Modified: trunk/Tools/Maestro/SDK/Samples/Samples.sln
===================================================================
--- trunk/Tools/Maestro/SDK/Samples/Samples.sln	2012-10-25 06:26:10 UTC (rev 7154)
+++ trunk/Tools/Maestro/SDK/Samples/Samples.sln	2012-10-25 12:13:57 UTC (rev 7155)
@@ -13,76 +13,42 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MapViewer", "MapViewer\MapViewer.csproj", "{19E838BC-A875-424A-A272-34380D862643}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloAddIn", "HelloAddIn\HelloAddIn.csproj", "{14855B2E-56F6-48C9-B982-E2A8CE29DECC}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
-		Debug|Mixed Platforms = Debug|Mixed Platforms
-		Debug|x86 = Debug|x86
 		Release|Any CPU = Release|Any CPU
-		Release|Mixed Platforms = Release|Mixed Platforms
-		Release|x86 = Release|x86
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{30EA9CAC-7DFA-4434-87F4-0AB226F2D305}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{30EA9CAC-7DFA-4434-87F4-0AB226F2D305}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{30EA9CAC-7DFA-4434-87F4-0AB226F2D305}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{30EA9CAC-7DFA-4434-87F4-0AB226F2D305}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{30EA9CAC-7DFA-4434-87F4-0AB226F2D305}.Debug|x86.ActiveCfg = Debug|Any CPU
 		{30EA9CAC-7DFA-4434-87F4-0AB226F2D305}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{30EA9CAC-7DFA-4434-87F4-0AB226F2D305}.Release|Any CPU.Build.0 = Release|Any CPU
-		{30EA9CAC-7DFA-4434-87F4-0AB226F2D305}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{30EA9CAC-7DFA-4434-87F4-0AB226F2D305}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{30EA9CAC-7DFA-4434-87F4-0AB226F2D305}.Release|x86.ActiveCfg = Release|Any CPU
 		{7C572B2A-5E77-4AB4-B8AD-1172D3E725EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{7C572B2A-5E77-4AB4-B8AD-1172D3E725EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{7C572B2A-5E77-4AB4-B8AD-1172D3E725EC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{7C572B2A-5E77-4AB4-B8AD-1172D3E725EC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{7C572B2A-5E77-4AB4-B8AD-1172D3E725EC}.Debug|x86.ActiveCfg = Debug|Any CPU
 		{7C572B2A-5E77-4AB4-B8AD-1172D3E725EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{7C572B2A-5E77-4AB4-B8AD-1172D3E725EC}.Release|Any CPU.Build.0 = Release|Any CPU
-		{7C572B2A-5E77-4AB4-B8AD-1172D3E725EC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{7C572B2A-5E77-4AB4-B8AD-1172D3E725EC}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{7C572B2A-5E77-4AB4-B8AD-1172D3E725EC}.Release|x86.ActiveCfg = Release|Any CPU
 		{6105DB0C-65F5-47DF-B3AE-36A430EC16E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{6105DB0C-65F5-47DF-B3AE-36A430EC16E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{6105DB0C-65F5-47DF-B3AE-36A430EC16E0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{6105DB0C-65F5-47DF-B3AE-36A430EC16E0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{6105DB0C-65F5-47DF-B3AE-36A430EC16E0}.Debug|x86.ActiveCfg = Debug|Any CPU
 		{6105DB0C-65F5-47DF-B3AE-36A430EC16E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6105DB0C-65F5-47DF-B3AE-36A430EC16E0}.Release|Any CPU.Build.0 = Release|Any CPU
-		{6105DB0C-65F5-47DF-B3AE-36A430EC16E0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{6105DB0C-65F5-47DF-B3AE-36A430EC16E0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{6105DB0C-65F5-47DF-B3AE-36A430EC16E0}.Release|x86.ActiveCfg = Release|Any CPU
 		{F568A956-4D93-46DF-856A-01883CA61CBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{F568A956-4D93-46DF-856A-01883CA61CBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{F568A956-4D93-46DF-856A-01883CA61CBB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{F568A956-4D93-46DF-856A-01883CA61CBB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{F568A956-4D93-46DF-856A-01883CA61CBB}.Debug|x86.ActiveCfg = Debug|Any CPU
 		{F568A956-4D93-46DF-856A-01883CA61CBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F568A956-4D93-46DF-856A-01883CA61CBB}.Release|Any CPU.Build.0 = Release|Any CPU
-		{F568A956-4D93-46DF-856A-01883CA61CBB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{F568A956-4D93-46DF-856A-01883CA61CBB}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{F568A956-4D93-46DF-856A-01883CA61CBB}.Release|x86.ActiveCfg = Release|Any CPU
 		{6C2F72BB-7B46-4D82-99AC-31A5840A869D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{6C2F72BB-7B46-4D82-99AC-31A5840A869D}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{6C2F72BB-7B46-4D82-99AC-31A5840A869D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{6C2F72BB-7B46-4D82-99AC-31A5840A869D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{6C2F72BB-7B46-4D82-99AC-31A5840A869D}.Debug|x86.ActiveCfg = Debug|Any CPU
 		{6C2F72BB-7B46-4D82-99AC-31A5840A869D}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6C2F72BB-7B46-4D82-99AC-31A5840A869D}.Release|Any CPU.Build.0 = Release|Any CPU
-		{6C2F72BB-7B46-4D82-99AC-31A5840A869D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{6C2F72BB-7B46-4D82-99AC-31A5840A869D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{6C2F72BB-7B46-4D82-99AC-31A5840A869D}.Release|x86.ActiveCfg = Release|Any CPU
 		{19E838BC-A875-424A-A272-34380D862643}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{19E838BC-A875-424A-A272-34380D862643}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{19E838BC-A875-424A-A272-34380D862643}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{19E838BC-A875-424A-A272-34380D862643}.Debug|x86.ActiveCfg = Debug|x86
-		{19E838BC-A875-424A-A272-34380D862643}.Debug|x86.Build.0 = Debug|x86
+		{19E838BC-A875-424A-A272-34380D862643}.Debug|Any CPU.Build.0 = Debug|x86
 		{19E838BC-A875-424A-A272-34380D862643}.Release|Any CPU.ActiveCfg = Release|x86
-		{19E838BC-A875-424A-A272-34380D862643}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{19E838BC-A875-424A-A272-34380D862643}.Release|Mixed Platforms.Build.0 = Release|x86
-		{19E838BC-A875-424A-A272-34380D862643}.Release|x86.ActiveCfg = Release|x86
-		{19E838BC-A875-424A-A272-34380D862643}.Release|x86.Build.0 = Release|x86
+		{19E838BC-A875-424A-A272-34380D862643}.Release|Any CPU.Build.0 = Release|x86
+		{14855B2E-56F6-48C9-B982-E2A8CE29DECC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{14855B2E-56F6-48C9-B982-E2A8CE29DECC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{14855B2E-56F6-48C9-B982-E2A8CE29DECC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{14855B2E-56F6-48C9-B982-E2A8CE29DECC}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE



More information about the mapguide-commits mailing list