[mapguide-commits] r5059 - in sandbox/maestro-3.0: Maestro.Base/Editor Maestro.Editors Maestro.Editors/Properties Maestro.Editors/Resources Maestro.Editors/WebLayout Maestro.Editors/WebLayout/Commands OSGeo.MapGuide.MaestroAPI/ObjectModels

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Jul 29 09:13:00 EDT 2010


Author: jng
Date: 2010-07-29 13:13:00 +0000 (Thu, 29 Jul 2010)
New Revision: 5059

Added:
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_back.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_back_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_buffer.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_buffer_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_clearselect.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_clearselect_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_copy.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_copy_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_ctxarrow.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_fitwindow.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_fitwindow_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_forward.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_forward_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_help.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_help_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_home.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_home_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_invokescript.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_invokescript_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_invokeurl.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_invokeurl_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_loading.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_measure.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_measure_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_menuarrow.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_menuarrow_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_menuarrowup.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_menuarrowup_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_null.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_pan.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_pan_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_pandown.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_pandown_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panleft.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panleft_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panright.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panright_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panup.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panup_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_plotdwf.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_plotdwf_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_popupscrolldown.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_popupscrolldown_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_popupscrollup.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_popupscrollup_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_print.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_print_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_printablepage.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_printablepage_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_refreshmap.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_refreshmap_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_restorecenter.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_restorecenter_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_search.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_search_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_select.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_select_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectpolygon.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectpolygon_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectradius.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectradius_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectwithin.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectwithin_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_tasks.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_tasks_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_viewoptions.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_viewoptions_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoom.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoom_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomin.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomin_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomnext.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomnext_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomout.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomout_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomprev.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomprev_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomrect.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomrect_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomselect.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomselect_disabled.gif
   sandbox/maestro-3.0/Maestro.Editors/Resources/question.png
   sandbox/maestro-3.0/Maestro.Editors/Resources/ui-menu.png
   sandbox/maestro-3.0/Maestro.Editors/Resources/ui-splitter-horizontal.png
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/CommandIconCache.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeScriptCtrl.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeScriptCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeScriptCtrl.resx
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeURLCtrl.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeURLCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeURLCtrl.resx
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/SearchCmdCtrl.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/SearchCmdCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/SearchCmdCtrl.resx
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/MenuEditorCtrl.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/MenuEditorCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/MenuEditorCtrl.resx
Modified:
   sandbox/maestro-3.0/Maestro.Base/Editor/WebLayoutEditor.Designer.cs
   sandbox/maestro-3.0/Maestro.Base/Editor/WebLayoutEditor.cs
   sandbox/maestro-3.0/Maestro.Editors/EditorBase.cs
   sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj
   sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/CustomCommandPropertyCtrl.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/CustomCommandPropertyCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutCommandsCtrl.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutCommandsCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutEditorCtrl.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutEditorCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutMenusCtrl.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutMenusCtrl.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutMenusCtrl.resx
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutSettingsCtrl.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutSettingsCtrl.cs
   sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/ObjectFactory.cs
   sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/WebLayout.cs
Log:
This submission improves the web layout editor: 

 - Support for editing InvokeURL, InvokeScript and Search commands
 - Now showing all commands registered in the weblayout (built-in and custom)
 - Now showing all menu items on the toolbar, context menu and task menu. 
 - This also bundles the AJAX viewer icon set, which is used to set icons to built-in commands or commands with "well-known" image urls.

Modified: sandbox/maestro-3.0/Maestro.Base/Editor/WebLayoutEditor.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Editor/WebLayoutEditor.Designer.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Base/Editor/WebLayoutEditor.Designer.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -28,22 +28,22 @@
         /// </summary>
         private void InitializeComponent()
         {
-            this.webLayoutEditorCtrl1 = new Maestro.Editors.WebLayout.WebLayoutEditorCtrl();
+            this.webLayoutEditorCtrl = new Maestro.Editors.WebLayout.WebLayoutEditorCtrl();
             this.panelBody.SuspendLayout();
             this.SuspendLayout();
             // 
             // panelBody
             // 
-            this.panelBody.Controls.Add(this.webLayoutEditorCtrl1);
+            this.panelBody.Controls.Add(this.webLayoutEditorCtrl);
             // 
             // webLayoutEditorCtrl1
             // 
-            this.webLayoutEditorCtrl1.AutoScroll = true;
-            this.webLayoutEditorCtrl1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.webLayoutEditorCtrl1.Location = new System.Drawing.Point(0, 0);
-            this.webLayoutEditorCtrl1.Name = "webLayoutEditorCtrl1";
-            this.webLayoutEditorCtrl1.Size = new System.Drawing.Size(677, 520);
-            this.webLayoutEditorCtrl1.TabIndex = 0;
+            this.webLayoutEditorCtrl.AutoScroll = true;
+            this.webLayoutEditorCtrl.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.webLayoutEditorCtrl.Location = new System.Drawing.Point(0, 0);
+            this.webLayoutEditorCtrl.Name = "webLayoutEditorCtrl1";
+            this.webLayoutEditorCtrl.Size = new System.Drawing.Size(677, 520);
+            this.webLayoutEditorCtrl.TabIndex = 0;
             // 
             // WebLayoutEditor
             // 
@@ -57,7 +57,7 @@
 
         #endregion
 
-        private Maestro.Editors.WebLayout.WebLayoutEditorCtrl webLayoutEditorCtrl1;
+        private Maestro.Editors.WebLayout.WebLayoutEditorCtrl webLayoutEditorCtrl;
 
     }
 }

Modified: sandbox/maestro-3.0/Maestro.Base/Editor/WebLayoutEditor.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Editor/WebLayoutEditor.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Base/Editor/WebLayoutEditor.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -36,7 +36,7 @@
 
         protected override void Bind(Maestro.Editors.IEditorService service)
         {
-            
+            webLayoutEditorCtrl.Bind(service);
         }
     }
 }

Modified: sandbox/maestro-3.0/Maestro.Editors/EditorBase.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/EditorBase.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/EditorBase.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -32,6 +32,28 @@
             throw new NotImplementedException();
         }
 
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing)
+            {
+                UnsubscribeEventHandlers();
+            }
+            base.Dispose(disposing);
+        }
+
+        protected virtual void UnsubscribeEventHandlers()
+        {
+            var handler = this.ResourceChanged;
+            if (handler != null)
+            {
+                foreach (var h in handler.GetInvocationList())
+                {
+                    this.ResourceChanged -= (EventHandler)h;
+                }
+                this.ResourceChanged = null;
+            }
+        }
+
         protected virtual void OnResourceChanged()
         {
             var handler = this.ResourceChanged;

Modified: sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj	2010-07-29 13:13:00 UTC (rev 5059)
@@ -449,12 +449,37 @@
       <DesignTime>True</DesignTime>
       <DependentUpon>Resources.resx</DependentUpon>
     </Compile>
+    <Compile Include="WebLayout\CommandIconCache.cs" />
+    <Compile Include="WebLayout\Commands\InvokeScriptCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="WebLayout\Commands\InvokeScriptCtrl.Designer.cs">
+      <DependentUpon>InvokeScriptCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="WebLayout\Commands\InvokeURLCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="WebLayout\Commands\InvokeURLCtrl.Designer.cs">
+      <DependentUpon>InvokeURLCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="WebLayout\Commands\SearchCmdCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="WebLayout\Commands\SearchCmdCtrl.Designer.cs">
+      <DependentUpon>SearchCmdCtrl.cs</DependentUpon>
+    </Compile>
     <Compile Include="WebLayout\CustomCommandPropertyCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
     <Compile Include="WebLayout\CustomCommandPropertyCtrl.Designer.cs">
       <DependentUpon>CustomCommandPropertyCtrl.cs</DependentUpon>
     </Compile>
+    <Compile Include="WebLayout\MenuEditorCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="WebLayout\MenuEditorCtrl.Designer.cs">
+      <DependentUpon>MenuEditorCtrl.cs</DependentUpon>
+    </Compile>
     <Compile Include="WebLayout\WebLayoutCommandsCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -750,10 +775,26 @@
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="WebLayout\Commands\InvokeScriptCtrl.resx">
+      <DependentUpon>InvokeScriptCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="WebLayout\Commands\InvokeURLCtrl.resx">
+      <DependentUpon>InvokeURLCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="WebLayout\Commands\SearchCmdCtrl.resx">
+      <DependentUpon>SearchCmdCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
     <EmbeddedResource Include="WebLayout\CustomCommandPropertyCtrl.resx">
       <DependentUpon>CustomCommandPropertyCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="WebLayout\MenuEditorCtrl.resx">
+      <DependentUpon>MenuEditorCtrl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
     <EmbeddedResource Include="WebLayout\WebLayoutCommandsCtrl.resx">
       <DependentUpon>WebLayoutCommandsCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>
@@ -981,6 +1022,258 @@
     <None Include="Resources\GeometryStyleComboDataset.xml" />
   </ItemGroup>
   <ItemGroup>
+    <None Include="Resources\ui-splitter-horizontal.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\ui-menu.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_back.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_back_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_buffer.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_buffer_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_clearselect.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_clearselect_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_copy.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_copy_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_ctxarrow.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_fitwindow.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_fitwindow_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_forward.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_forward_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_help.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_help_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_home.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_home_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_invokescript.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_invokescript_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_invokeurl.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_invokeurl_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_loading.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_measure.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_measure_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_menuarrow.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_menuarrow_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_menuarrowup.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_menuarrowup_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_null.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_pan.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_pan_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_pandown.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_pandown_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_panleft.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_panleft_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_panright.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_panright_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_panup.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_panup_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_plotdwf.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_plotdwf_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_popupscrolldown.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_popupscrolldown_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_popupscrollup.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_popupscrollup_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_print.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_print_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_printablepage.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_printablepage_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_refreshmap.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_refreshmap_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_restorecenter.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_restorecenter_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_search.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_search_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_select.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_select_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_selectpolygon.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_selectpolygon_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_selectradius.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_selectradius_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_selectwithin.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_selectwithin_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_tasks.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_tasks_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_viewoptions.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_viewoptions_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_zoom.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_zoom_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_zoomin.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_zoomin_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_zoomnext.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_zoomnext_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_zoomout.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_zoomout_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_zoomprev.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_zoomprev_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_zoomrect.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_zoomrect_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_zoomselect.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\icon_zoomselect_disabled.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\question.png" />
+  </ItemGroup>
+  <ItemGroup>
     <Folder Include="DrawingSource\Preview\" />
     <Folder Include="FeatureSource\Providers\Rdbms\" />
     <Folder Include="LayerDefinition\Raster\" />

Modified: sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:2.0.50727.4927
+//     Runtime Version:2.0.50727.3053
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
@@ -305,6 +305,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Delete Command.
+        /// </summary>
+        internal static string DeleteCommand {
+            get {
+                return ResourceManager.GetString("DeleteCommand", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Diverging.
         /// </summary>
         internal static string DivergingName {
@@ -572,6 +581,538 @@
             }
         }
         
+        internal static System.Drawing.Bitmap icon_back {
+            get {
+                object obj = ResourceManager.GetObject("icon_back", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_back_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_back_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_buffer {
+            get {
+                object obj = ResourceManager.GetObject("icon_buffer", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_buffer_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_buffer_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_clearselect {
+            get {
+                object obj = ResourceManager.GetObject("icon_clearselect", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_clearselect_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_clearselect_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_copy {
+            get {
+                object obj = ResourceManager.GetObject("icon_copy", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_copy_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_copy_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_ctxarrow {
+            get {
+                object obj = ResourceManager.GetObject("icon_ctxarrow", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_fitwindow {
+            get {
+                object obj = ResourceManager.GetObject("icon_fitwindow", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_fitwindow_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_fitwindow_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_forward {
+            get {
+                object obj = ResourceManager.GetObject("icon_forward", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_forward_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_forward_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_help {
+            get {
+                object obj = ResourceManager.GetObject("icon_help", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_help_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_help_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_home {
+            get {
+                object obj = ResourceManager.GetObject("icon_home", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_home_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_home_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_invokescript {
+            get {
+                object obj = ResourceManager.GetObject("icon_invokescript", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_invokescript_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_invokescript_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_invokeurl {
+            get {
+                object obj = ResourceManager.GetObject("icon_invokeurl", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_invokeurl_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_invokeurl_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_measure {
+            get {
+                object obj = ResourceManager.GetObject("icon_measure", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_measure_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_measure_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_null {
+            get {
+                object obj = ResourceManager.GetObject("icon_null", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_pan {
+            get {
+                object obj = ResourceManager.GetObject("icon_pan", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_pan_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_pan_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_pandown {
+            get {
+                object obj = ResourceManager.GetObject("icon_pandown", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_pandown_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_pandown_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_panleft {
+            get {
+                object obj = ResourceManager.GetObject("icon_panleft", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_panleft_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_panleft_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_panright {
+            get {
+                object obj = ResourceManager.GetObject("icon_panright", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_panright_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_panright_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_panup {
+            get {
+                object obj = ResourceManager.GetObject("icon_panup", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_panup_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_panup_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_plotdwf {
+            get {
+                object obj = ResourceManager.GetObject("icon_plotdwf", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_plotdwf_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_plotdwf_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_popupscrolldown {
+            get {
+                object obj = ResourceManager.GetObject("icon_popupscrolldown", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_popupscrolldown_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_popupscrolldown_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_popupscrollup {
+            get {
+                object obj = ResourceManager.GetObject("icon_popupscrollup", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_popupscrollup_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_popupscrollup_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_print {
+            get {
+                object obj = ResourceManager.GetObject("icon_print", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_print_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_print_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_printablepage {
+            get {
+                object obj = ResourceManager.GetObject("icon_printablepage", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_printablepage_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_printablepage_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_refreshmap {
+            get {
+                object obj = ResourceManager.GetObject("icon_refreshmap", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_refreshmap_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_refreshmap_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_restorecenter {
+            get {
+                object obj = ResourceManager.GetObject("icon_restorecenter", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_restorecenter_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_restorecenter_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_search {
+            get {
+                object obj = ResourceManager.GetObject("icon_search", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_search_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_search_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_select {
+            get {
+                object obj = ResourceManager.GetObject("icon_select", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_select_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_select_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_selectpolygon {
+            get {
+                object obj = ResourceManager.GetObject("icon_selectpolygon", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_selectpolygon_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_selectpolygon_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_selectradius {
+            get {
+                object obj = ResourceManager.GetObject("icon_selectradius", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_selectradius_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_selectradius_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_selectwithin {
+            get {
+                object obj = ResourceManager.GetObject("icon_selectwithin", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_selectwithin_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_selectwithin_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_tasks {
+            get {
+                object obj = ResourceManager.GetObject("icon_tasks", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_tasks_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_tasks_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_viewoptions {
+            get {
+                object obj = ResourceManager.GetObject("icon_viewoptions", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_viewoptions_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_viewoptions_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_zoom {
+            get {
+                object obj = ResourceManager.GetObject("icon_zoom", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_zoom_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_zoom_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_zoomin {
+            get {
+                object obj = ResourceManager.GetObject("icon_zoomin", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_zoomin_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_zoomin_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_zoomnext {
+            get {
+                object obj = ResourceManager.GetObject("icon_zoomnext", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_zoomnext_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_zoomnext_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_zoomout {
+            get {
+                object obj = ResourceManager.GetObject("icon_zoomout", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_zoomout_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_zoomout_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_zoomprev {
+            get {
+                object obj = ResourceManager.GetObject("icon_zoomprev", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_zoomprev_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_zoomprev_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_zoomrect {
+            get {
+                object obj = ResourceManager.GetObject("icon_zoomrect", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_zoomrect_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_zoomrect_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_zoomselect {
+            get {
+                object obj = ResourceManager.GetObject("icon_zoomselect", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap icon_zoomselect_disabled {
+            get {
+                object obj = ResourceManager.GetObject("icon_zoomselect_disabled", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to infinite.
         /// </summary>
@@ -635,6 +1176,24 @@
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Invoke Script Command.
+        /// </summary>
+        internal static string InvokeScriptCmdDescription {
+            get {
+                return ResourceManager.GetString("InvokeScriptCmdDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Invoke URL command.
+        /// </summary>
+        internal static string InvokeUrlCmdDescription {
+            get {
+                return ResourceManager.GetString("InvokeUrlCmdDescription", resourceCulture);
+            }
+        }
+        
         internal static System.Drawing.Bitmap layer {
             get {
                 object obj = ResourceManager.GetObject("layer", resourceCulture);
@@ -743,6 +1302,15 @@
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to This command is referenced in the following menus: {0}. Do you want to delete this command and all menu items referencing it?.
+        /// </summary>
+        internal static string PromptDeleteCommand {
+            get {
+                return ResourceManager.GetString("PromptDeleteCommand", resourceCulture);
+            }
+        }
+        
         internal static System.Drawing.Bitmap property {
             get {
                 object obj = ResourceManager.GetObject("property", resourceCulture);
@@ -769,6 +1337,13 @@
             }
         }
         
+        internal static System.Drawing.Bitmap question {
+            get {
+                object obj = ResourceManager.GetObject("question", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         internal static System.Drawing.Bitmap ruler {
             get {
                 object obj = ResourceManager.GetObject("ruler", resourceCulture);
@@ -791,6 +1366,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Search Command.
+        /// </summary>
+        internal static string SearchCmdDescription {
+            get {
+                return ResourceManager.GetString("SearchCmdDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to &lt;Select column&gt;.
         /// </summary>
         internal static string SelectColumnPlaceholder {
@@ -966,6 +1550,20 @@
             }
         }
         
+        internal static System.Drawing.Bitmap ui_menu {
+            get {
+                object obj = ResourceManager.GetObject("ui_menu", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap ui_splitter_horizontal {
+            get {
+                object obj = ResourceManager.GetObject("ui_splitter_horizontal", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Document is valid.
         /// </summary>

Modified: sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx	2010-07-29 13:13:00 UTC (rev 5059)
@@ -499,4 +499,256 @@
   <data name="ColorBrewer" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\ColorBrewer.csv;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
   </data>
+  <data name="InvokeScriptCmdDescription" xml:space="preserve">
+    <value>Invoke Script Command</value>
+  </data>
+  <data name="InvokeUrlCmdDescription" xml:space="preserve">
+    <value>Invoke URL command</value>
+  </data>
+  <data name="SearchCmdDescription" xml:space="preserve">
+    <value>Search Command</value>
+  </data>
+  <data name="DeleteCommand" xml:space="preserve">
+    <value>Delete Command</value>
+  </data>
+  <data name="PromptDeleteCommand" xml:space="preserve">
+    <value>This command is referenced in the following menus: {0}. Do you want to delete this command and all menu items referencing it?</value>
+  </data>
+  <data name="ui_menu" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\ui-menu.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="ui_splitter_horizontal" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\ui-splitter-horizontal.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_back" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_back.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_back_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_back_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_buffer" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_buffer.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_buffer_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_buffer_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_clearselect" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_clearselect.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_clearselect_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_clearselect_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_copy" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_copy.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_copy_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_copy_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_ctxarrow" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_ctxarrow.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_fitwindow" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_fitwindow.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_fitwindow_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_fitwindow_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_forward" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_forward.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_forward_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_forward_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_help" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_help.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_help_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_help_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_home" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_home.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_home_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_home_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_invokescript" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_invokescript.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_invokescript_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_invokescript_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_invokeurl" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_invokeurl.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_invokeurl_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_invokeurl_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_measure" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_measure.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_measure_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_measure_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_null" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_null.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_pan" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_pan.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_pandown" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_pandown.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_pandown_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_pandown_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_panleft" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_panleft.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_panleft_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_panleft_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_panright" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_panright.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_panright_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_panright_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_panup" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_panup.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_panup_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_panup_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_pan_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_pan_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_plotdwf" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_plotdwf.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_plotdwf_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_plotdwf_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_popupscrolldown" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_popupscrolldown.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_popupscrolldown_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_popupscrolldown_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_popupscrollup" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_popupscrollup.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_popupscrollup_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_popupscrollup_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_print" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_print.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_printablepage" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_printablepage.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_printablepage_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_printablepage_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_print_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_print_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_refreshmap" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_refreshmap.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_refreshmap_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_refreshmap_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_restorecenter" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_restorecenter.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_restorecenter_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_restorecenter_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_search" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_search.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_search_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_search_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_select" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_select.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_selectpolygon" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_selectpolygon.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_selectpolygon_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_selectpolygon_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_selectradius" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_selectradius.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_selectradius_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_selectradius_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_selectwithin" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_selectwithin.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_selectwithin_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_selectwithin_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_select_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_select_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_tasks" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_tasks.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_tasks_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_tasks_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_viewoptions" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_viewoptions.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_viewoptions_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_viewoptions_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_zoom" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_zoom.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_zoomin" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_zoomin.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_zoomin_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_zoomin_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_zoomnext" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_zoomnext.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_zoomnext_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_zoomnext_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_zoomout" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_zoomout.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_zoomout_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_zoomout_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_zoomprev" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_zoomprev.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_zoomprev_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_zoomprev_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_zoomrect" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_zoomrect.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_zoomrect_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_zoomrect_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_zoomselect" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_zoomselect.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_zoomselect_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_zoomselect_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="icon_zoom_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\icon_zoom_disabled.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="question" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\question.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-3.0/Maestro.Editors/Resources/icon_back.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_back.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_back_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_back_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_buffer.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_buffer.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_buffer_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_buffer_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_clearselect.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_clearselect.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_clearselect_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_clearselect_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_copy.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_copy.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_copy_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_copy_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_ctxarrow.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_ctxarrow.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_fitwindow.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_fitwindow.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_fitwindow_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_fitwindow_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_forward.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_forward.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_forward_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_forward_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_help.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_help.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_help_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_help_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_home.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_home.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_home_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_home_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_invokescript.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_invokescript.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_invokescript_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_invokescript_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_invokeurl.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_invokeurl.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_invokeurl_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_invokeurl_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_loading.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_loading.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_measure.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_measure.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_measure_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_measure_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_menuarrow.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_menuarrow.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_menuarrow_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_menuarrow_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_menuarrowup.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_menuarrowup.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_menuarrowup_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_menuarrowup_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_null.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_null.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_pan.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_pan.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_pan_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_pan_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_pandown.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_pandown.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_pandown_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_pandown_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panleft.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panleft.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panleft_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panleft_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panright.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panright.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panright_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panright_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panup.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panup.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panup_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_panup_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_plotdwf.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_plotdwf.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_plotdwf_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_plotdwf_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_popupscrolldown.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_popupscrolldown.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_popupscrolldown_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_popupscrolldown_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_popupscrollup.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_popupscrollup.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_popupscrollup_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_popupscrollup_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_print.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_print.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_print_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_print_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_printablepage.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_printablepage.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_printablepage_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_printablepage_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_refreshmap.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_refreshmap.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_refreshmap_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_refreshmap_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_restorecenter.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_restorecenter.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_restorecenter_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_restorecenter_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_search.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_search.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_search_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_search_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_select.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_select.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_select_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_select_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectpolygon.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectpolygon.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectpolygon_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectpolygon_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectradius.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectradius.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectradius_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectradius_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectwithin.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectwithin.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectwithin_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_selectwithin_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_tasks.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_tasks.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_tasks_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_tasks_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_viewoptions.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_viewoptions.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_viewoptions_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_viewoptions_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoom.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoom.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoom_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoom_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomin.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomin.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomin_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomin_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomnext.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomnext.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomnext_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomnext_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomout.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomout.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomout_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomout_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomprev.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomprev.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomprev_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomprev_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomrect.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomrect.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomrect_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomrect_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomselect.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomselect.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomselect_disabled.gif
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/icon_zoomselect_disabled.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/question.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/question.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/ui-menu.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/ui-menu.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/Resources/ui-splitter-horizontal.png
===================================================================
(Binary files differ)


Property changes on: sandbox/maestro-3.0/Maestro.Editors/Resources/ui-splitter-horizontal.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/maestro-3.0/Maestro.Editors/WebLayout/CommandIconCache.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/CommandIconCache.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/CommandIconCache.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -0,0 +1,53 @@
+#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;
+using OSGeo.MapGuide.ObjectModels.WebLayout;
+
+namespace Maestro.Editors.WebLayout
+{
+    public static class CommandIconCache
+    {
+        public static Bitmap GetStandardCommandIcon(BuiltInCommandType cmdType)
+        {
+            var resMgr = Properties.Resources.ResourceManager;
+            var culture = Properties.Resources.Culture;
+
+            return resMgr.GetObject("icon_" + cmdType.ToString().ToLower(), culture) as Bitmap;
+        }
+
+        public static Bitmap GetStandardCommandIcon(string relpath)
+        {
+            if (!relpath.StartsWith("../stdicons/") && !relpath.EndsWith(".gif"))
+                return null;
+
+            var resMgr = Properties.Resources.ResourceManager;
+            var culture = Properties.Resources.Culture;
+
+            int stdicons = "../stdicons/".Length;
+            int gif = ".gif".Length;
+            string iconName = relpath.Substring(stdicons, relpath.Length - gif - stdicons);
+
+            return resMgr.GetObject(iconName, culture) as Bitmap;
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeScriptCtrl.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeScriptCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeScriptCtrl.Designer.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -0,0 +1,101 @@
+namespace Maestro.Editors.WebLayout.Commands
+{
+    partial class InvokeScriptCtrl
+    {
+        /// <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.panel1 = new System.Windows.Forms.Panel();
+            this.txtScript = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.panel1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Size = new System.Drawing.Size(305, 25);
+            this.toolStrip1.TabIndex = 0;
+            this.toolStrip1.Text = "toolStrip1";
+            this.toolStrip1.Visible = false;
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this.txtScript);
+            this.panel1.Controls.Add(this.label1);
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.panel1.Location = new System.Drawing.Point(0, 0);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(305, 341);
+            this.panel1.TabIndex = 1;
+            // 
+            // txtScript
+            // 
+            this.txtScript.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.txtScript.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.txtScript.Location = new System.Drawing.Point(3, 20);
+            this.txtScript.Multiline = true;
+            this.txtScript.Name = "txtScript";
+            this.txtScript.Size = new System.Drawing.Size(299, 318);
+            this.txtScript.TabIndex = 3;
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(3, 4);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(108, 13);
+            this.label1.TabIndex = 2;
+            this.label1.Text = "Script Command Text";
+            // 
+            // InvokeScriptCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.panel1);
+            this.Controls.Add(this.toolStrip1);
+            this.Name = "InvokeScriptCtrl";
+            this.Size = new System.Drawing.Size(305, 341);
+            this.panel1.ResumeLayout(false);
+            this.panel1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.Panel panel1;
+        private System.Windows.Forms.TextBox txtScript;
+        private System.Windows.Forms.Label label1;
+
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeScriptCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeScriptCtrl.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeScriptCtrl.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -0,0 +1,47 @@
+#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 Maestro.Shared.UI;
+
+namespace Maestro.Editors.WebLayout.Commands
+{
+    public partial class InvokeScriptCtrl : UserControl
+    {
+        public InvokeScriptCtrl()
+        {
+            InitializeComponent();
+        }
+
+        private IEditorService _edsvc;
+
+        internal void Bind(OSGeo.MapGuide.ObjectModels.WebLayout.InvokeScriptCommandType invokeScriptCommandType, IEditorService service)
+        {
+            _edsvc = service;
+
+            TextBoxBinder.BindText(txtScript, invokeScriptCommandType, "Script");
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeScriptCtrl.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeScriptCtrl.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeScriptCtrl.resx	2010-07-29 13:13:00 UTC (rev 5059)
@@ -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-3.0/Maestro.Editors/WebLayout/Commands/InvokeURLCtrl.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeURLCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeURLCtrl.Designer.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -0,0 +1,226 @@
+namespace Maestro.Editors.WebLayout.Commands
+{
+    partial class InvokeURLCtrl
+    {
+        /// <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.panel1 = new System.Windows.Forms.Panel();
+            this.button1 = new System.Windows.Forms.Button();
+            this.txtFrame = new System.Windows.Forms.TextBox();
+            this.cmbTargetFrame = new System.Windows.Forms.ComboBox();
+            this.txtUrl = new System.Windows.Forms.TextBox();
+            this.lstLayers = new System.Windows.Forms.ListBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.grdParameters = new System.Windows.Forms.DataGridView();
+            this.label4 = new System.Windows.Forms.Label();
+            this.chkDisableIfEmpty = new System.Windows.Forms.CheckBox();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label1 = new System.Windows.Forms.Label();
+            this.panel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.grdParameters)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Size = new System.Drawing.Size(314, 25);
+            this.toolStrip1.TabIndex = 0;
+            this.toolStrip1.Text = "toolStrip1";
+            this.toolStrip1.Visible = false;
+            // 
+            // panel1
+            // 
+            this.panel1.AutoScroll = true;
+            this.panel1.Controls.Add(this.button1);
+            this.panel1.Controls.Add(this.txtFrame);
+            this.panel1.Controls.Add(this.cmbTargetFrame);
+            this.panel1.Controls.Add(this.txtUrl);
+            this.panel1.Controls.Add(this.lstLayers);
+            this.panel1.Controls.Add(this.label5);
+            this.panel1.Controls.Add(this.grdParameters);
+            this.panel1.Controls.Add(this.label4);
+            this.panel1.Controls.Add(this.chkDisableIfEmpty);
+            this.panel1.Controls.Add(this.label3);
+            this.panel1.Controls.Add(this.label2);
+            this.panel1.Controls.Add(this.label1);
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.panel1.Location = new System.Drawing.Point(0, 0);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(314, 388);
+            this.panel1.TabIndex = 1;
+            // 
+            // button1
+            // 
+            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.button1.Location = new System.Drawing.Point(261, 264);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(27, 21);
+            this.button1.TabIndex = 11;
+            this.button1.Text = "...";
+            this.button1.UseVisualStyleBackColor = true;
+            // 
+            // txtFrame
+            // 
+            this.txtFrame.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtFrame.Location = new System.Drawing.Point(79, 89);
+            this.txtFrame.Name = "txtFrame";
+            this.txtFrame.Size = new System.Drawing.Size(209, 20);
+            this.txtFrame.TabIndex = 10;
+            // 
+            // cmbTargetFrame
+            // 
+            this.cmbTargetFrame.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.cmbTargetFrame.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.cmbTargetFrame.FormattingEnabled = true;
+            this.cmbTargetFrame.Location = new System.Drawing.Point(79, 62);
+            this.cmbTargetFrame.Name = "cmbTargetFrame";
+            this.cmbTargetFrame.Size = new System.Drawing.Size(209, 21);
+            this.cmbTargetFrame.TabIndex = 9;
+            // 
+            // txtUrl
+            // 
+            this.txtUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtUrl.Location = new System.Drawing.Point(22, 32);
+            this.txtUrl.Name = "txtUrl";
+            this.txtUrl.Size = new System.Drawing.Size(266, 20);
+            this.txtUrl.TabIndex = 8;
+            // 
+            // lstLayers
+            // 
+            this.lstLayers.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.lstLayers.FormattingEnabled = true;
+            this.lstLayers.Location = new System.Drawing.Point(22, 288);
+            this.lstLayers.Name = "lstLayers";
+            this.lstLayers.Size = new System.Drawing.Size(266, 82);
+            this.lstLayers.TabIndex = 7;
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(19, 268);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(184, 13);
+            this.label5.TabIndex = 6;
+            this.label5.Text = "Valid layers (leave empty for all layers)";
+            // 
+            // grdParameters
+            // 
+            this.grdParameters.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.grdParameters.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.grdParameters.Location = new System.Drawing.Point(22, 168);
+            this.grdParameters.Name = "grdParameters";
+            this.grdParameters.Size = new System.Drawing.Size(266, 87);
+            this.grdParameters.TabIndex = 5;
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(19, 152);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(134, 13);
+            this.label4.TabIndex = 4;
+            this.label4.Text = "Additional URL Parameters";
+            // 
+            // chkDisableIfEmpty
+            // 
+            this.chkDisableIfEmpty.AutoSize = true;
+            this.chkDisableIfEmpty.Location = new System.Drawing.Point(22, 123);
+            this.chkDisableIfEmpty.Name = "chkDisableIfEmpty";
+            this.chkDisableIfEmpty.Size = new System.Drawing.Size(155, 17);
+            this.chkDisableIfEmpty.TabIndex = 3;
+            this.chkDisableIfEmpty.Text = "Disable if selection is empty";
+            this.chkDisableIfEmpty.UseVisualStyleBackColor = true;
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(19, 92);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(36, 13);
+            this.label3.TabIndex = 2;
+            this.label3.Text = "Frame";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(19, 16);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(29, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "URL";
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(19, 65);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(38, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Target";
+            // 
+            // InvokeURLCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.panel1);
+            this.Controls.Add(this.toolStrip1);
+            this.Name = "InvokeURLCtrl";
+            this.Size = new System.Drawing.Size(314, 388);
+            this.panel1.ResumeLayout(false);
+            this.panel1.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.grdParameters)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.Panel panel1;
+        private System.Windows.Forms.ListBox lstLayers;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.DataGridView grdParameters;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.CheckBox chkDisableIfEmpty;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox txtFrame;
+        private System.Windows.Forms.ComboBox cmbTargetFrame;
+        private System.Windows.Forms.TextBox txtUrl;
+        private System.Windows.Forms.Button button1;
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeURLCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeURLCtrl.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeURLCtrl.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -0,0 +1,77 @@
+#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 OSGeo.MapGuide.ObjectModels.WebLayout;
+using Maestro.Shared.UI;
+
+namespace Maestro.Editors.WebLayout.Commands
+{
+    public partial class InvokeURLCtrl : EditorBase
+    {
+        public InvokeURLCtrl()
+        {
+            InitializeComponent();
+        }
+
+        private IEditorService _edsvc;
+        private OSGeo.MapGuide.ObjectModels.WebLayout.InvokeURLCommandType _cmd;
+
+        public override void Bind(IEditorService service)
+        {
+            _edsvc = service;
+        }
+
+        internal void Bind(OSGeo.MapGuide.ObjectModels.WebLayout.InvokeURLCommandType invokeUrlCommandType, IEditorService service)
+        {
+            cmbTargetFrame.DataSource = Enum.GetValues(typeof(TargetType));
+            Bind(service);
+            service.RegisterCustomNotifier(this);
+
+            TextBoxBinder.BindText(txtUrl, invokeUrlCommandType, "URL");
+            TextBoxBinder.BindText(txtFrame, invokeUrlCommandType, "TargetFrame");
+            cmbTargetFrame.DataBindings.Add("SelectedItem", invokeUrlCommandType, "Target");
+            CheckBoxBinder.BindChecked(chkDisableIfEmpty, invokeUrlCommandType, "DisableIfSelectionEmpty");
+            grdParameters.DataSource = invokeUrlCommandType.AdditionalParameter;
+            lstLayers.DataSource = invokeUrlCommandType.LayerSet;
+
+            invokeUrlCommandType.PropertyChanged += OnCommandPropertyChanged;
+            _cmd = invokeUrlCommandType;
+        }
+
+        protected override void UnsubscribeEventHandlers()
+        {
+            if (_cmd != null)
+                _cmd.PropertyChanged -= OnCommandPropertyChanged;
+
+            base.UnsubscribeEventHandlers();
+        }
+
+        void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e)
+        {
+            OnResourceChanged();
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeURLCtrl.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeURLCtrl.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/InvokeURLCtrl.resx	2010-07-29 13:13:00 UTC (rev 5059)
@@ -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-3.0/Maestro.Editors/WebLayout/Commands/SearchCmdCtrl.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/SearchCmdCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/SearchCmdCtrl.Designer.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -0,0 +1,246 @@
+namespace Maestro.Editors.WebLayout.Commands
+{
+    partial class SearchCmdCtrl
+    {
+        /// <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.panel1 = new System.Windows.Forms.Panel();
+            this.label1 = new System.Windows.Forms.Label();
+            this.cmbLayers = new System.Windows.Forms.ComboBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.txtPrompt = new System.Windows.Forms.TextBox();
+            this.label3 = new System.Windows.Forms.Label();
+            this.txtFilter = new System.Windows.Forms.TextBox();
+            this.btnBrowse = new System.Windows.Forms.Button();
+            this.label4 = new System.Windows.Forms.Label();
+            this.numLimit = new System.Windows.Forms.NumericUpDown();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.grdOutputColumns = new System.Windows.Forms.DataGridView();
+            this.COL_NAME = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.COL_PROPERTY = new System.Windows.Forms.DataGridViewComboBoxColumn();
+            this.panel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.numLimit)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.grdOutputColumns)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Size = new System.Drawing.Size(332, 25);
+            this.toolStrip1.TabIndex = 0;
+            this.toolStrip1.Text = "toolStrip1";
+            this.toolStrip1.Visible = false;
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this.grdOutputColumns);
+            this.panel1.Controls.Add(this.label6);
+            this.panel1.Controls.Add(this.label5);
+            this.panel1.Controls.Add(this.numLimit);
+            this.panel1.Controls.Add(this.label4);
+            this.panel1.Controls.Add(this.btnBrowse);
+            this.panel1.Controls.Add(this.txtFilter);
+            this.panel1.Controls.Add(this.label3);
+            this.panel1.Controls.Add(this.txtPrompt);
+            this.panel1.Controls.Add(this.label2);
+            this.panel1.Controls.Add(this.cmbLayers);
+            this.panel1.Controls.Add(this.label1);
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.panel1.Location = new System.Drawing.Point(0, 0);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(332, 392);
+            this.panel1.TabIndex = 1;
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(14, 15);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(100, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Search on this layer";
+            // 
+            // cmbLayers
+            // 
+            this.cmbLayers.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.cmbLayers.FormattingEnabled = true;
+            this.cmbLayers.Location = new System.Drawing.Point(17, 31);
+            this.cmbLayers.Name = "cmbLayers";
+            this.cmbLayers.Size = new System.Drawing.Size(296, 21);
+            this.cmbLayers.TabIndex = 1;
+            this.cmbLayers.SelectedIndexChanged += new System.EventHandler(this.cmbLayers_SelectedIndexChanged);
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(14, 61);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(77, 13);
+            this.label2.TabIndex = 2;
+            this.label2.Text = "Search Prompt";
+            // 
+            // txtPrompt
+            // 
+            this.txtPrompt.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtPrompt.Location = new System.Drawing.Point(17, 77);
+            this.txtPrompt.Name = "txtPrompt";
+            this.txtPrompt.Size = new System.Drawing.Size(296, 20);
+            this.txtPrompt.TabIndex = 3;
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(14, 109);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(60, 13);
+            this.label3.TabIndex = 4;
+            this.label3.Text = "Query Filter";
+            // 
+            // txtFilter
+            // 
+            this.txtFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtFilter.Location = new System.Drawing.Point(17, 125);
+            this.txtFilter.Name = "txtFilter";
+            this.txtFilter.Size = new System.Drawing.Size(265, 20);
+            this.txtFilter.TabIndex = 5;
+            // 
+            // btnBrowse
+            // 
+            this.btnBrowse.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnBrowse.Location = new System.Drawing.Point(286, 123);
+            this.btnBrowse.Name = "btnBrowse";
+            this.btnBrowse.Size = new System.Drawing.Size(27, 23);
+            this.btnBrowse.TabIndex = 6;
+            this.btnBrowse.Text = "...";
+            this.btnBrowse.UseVisualStyleBackColor = true;
+            this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(14, 161);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(130, 13);
+            this.label4.TabIndex = 7;
+            this.label4.Text = "Restrict Search Results to";
+            // 
+            // numLimit
+            // 
+            this.numLimit.Location = new System.Drawing.Point(153, 159);
+            this.numLimit.Name = "numLimit";
+            this.numLimit.Size = new System.Drawing.Size(61, 20);
+            this.numLimit.TabIndex = 8;
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(220, 161);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(37, 13);
+            this.label5.TabIndex = 9;
+            this.label5.Text = "results";
+            // 
+            // label6
+            // 
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(14, 190);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(82, 13);
+            this.label6.TabIndex = 10;
+            this.label6.Text = "Output Columns";
+            // 
+            // grdOutputColumns
+            // 
+            this.grdOutputColumns.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.grdOutputColumns.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.grdOutputColumns.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+            this.COL_NAME,
+            this.COL_PROPERTY});
+            this.grdOutputColumns.Location = new System.Drawing.Point(17, 206);
+            this.grdOutputColumns.Name = "grdOutputColumns";
+            this.grdOutputColumns.Size = new System.Drawing.Size(296, 169);
+            this.grdOutputColumns.TabIndex = 11;
+            // 
+            // COL_NAME
+            // 
+            this.COL_NAME.DataPropertyName = "Name";
+            this.COL_NAME.HeaderText = "Name";
+            this.COL_NAME.Name = "COL_NAME";
+            this.COL_NAME.Resizable = System.Windows.Forms.DataGridViewTriState.True;
+            this.COL_NAME.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
+            // 
+            // COL_PROPERTY
+            // 
+            this.COL_PROPERTY.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
+            this.COL_PROPERTY.DataPropertyName = "Property";
+            this.COL_PROPERTY.HeaderText = "Property";
+            this.COL_PROPERTY.Name = "COL_PROPERTY";
+            // 
+            // SearchCmdCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.panel1);
+            this.Controls.Add(this.toolStrip1);
+            this.Name = "SearchCmdCtrl";
+            this.Size = new System.Drawing.Size(332, 392);
+            this.panel1.ResumeLayout(false);
+            this.panel1.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.numLimit)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.grdOutputColumns)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.Panel panel1;
+        private System.Windows.Forms.ComboBox cmbLayers;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.DataGridView grdOutputColumns;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.NumericUpDown numLimit;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Button btnBrowse;
+        private System.Windows.Forms.TextBox txtFilter;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.TextBox txtPrompt;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.DataGridViewTextBoxColumn COL_NAME;
+        private System.Windows.Forms.DataGridViewComboBoxColumn COL_PROPERTY;
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/SearchCmdCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/SearchCmdCtrl.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/SearchCmdCtrl.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -0,0 +1,146 @@
+#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 OSGeo.MapGuide.ObjectModels.WebLayout;
+using OSGeo.MapGuide.ObjectModels.MapDefinition;
+using Maestro.Shared.UI;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using OSGeo.MapGuide.ObjectModels.FeatureSource;
+using OSGeo.MapGuide.MaestroAPI;
+
+namespace Maestro.Editors.WebLayout.Commands
+{
+    public partial class SearchCmdCtrl : EditorBase
+    {
+        public SearchCmdCtrl()
+        {
+            InitializeComponent();
+            grdOutputColumns.AutoGenerateColumns = false;
+        }
+
+        private IEditorService _edsvc;
+        private WebLayoutType _wl;
+        private OSGeo.MapGuide.ObjectModels.WebLayout.SearchCommandType _cmd;
+        private FeatureSourceDescription.FeatureSourceSchema _cls;
+
+        private bool _init = true;
+
+        public override void Bind(IEditorService service)
+        {
+            _edsvc = service;
+        }
+
+        internal void Bind(OSGeo.MapGuide.ObjectModels.WebLayout.SearchCommandType searchCommandType, IEditorService service)
+        {
+            _init = true;
+            Bind(service);
+            _cmd = searchCommandType;
+
+            _wl = (WebLayoutType)_edsvc.GetEditedResource();
+            _wl.Map.PropertyChanged += OnWebLayoutPropertyChanged;
+
+            LoadLayers();
+
+            cmbLayers.DataBindings.Add("Text", _cmd, "Layer");
+            TextBoxBinder.BindText(txtFilter, _cmd, "Filter");
+            TextBoxBinder.BindText(txtPrompt, _cmd, "Prompt");
+
+            numLimit.DataBindings.Add("Value", _cmd, "MatchLimit");
+
+            UpdateColumns();
+            grdOutputColumns.DataSource = _cmd.ResultColumns;
+
+            _init = false;
+        }
+
+        protected override void UnsubscribeEventHandlers()
+        {
+            if (_wl != null && _wl.Map != null)
+                _wl.Map.PropertyChanged -= OnWebLayoutPropertyChanged;
+
+            base.UnsubscribeEventHandlers();
+        }
+
+        private void LoadLayers()
+        {
+            var map = (OSGeo.MapGuide.ObjectModels.MapDefinition.MapDefinition)_edsvc.ResourceService.GetResource(_wl.Map.ResourceId);
+
+            cmbLayers.DisplayMember = "Name";
+            cmbLayers.DataSource = map.MapLayer;
+        }
+
+        void OnWebLayoutPropertyChanged(object sender, PropertyChangedEventArgs e)
+        {
+            if (e.PropertyName == "ResourceId")
+            {
+                LoadLayers();
+            }
+        }
+
+        private void btnBrowse_Click(object sender, EventArgs e)
+        {
+            var layer = cmbLayers.SelectedItem as MapLayerType;
+            if (layer != null)
+            {
+                var ldf = (ILayerDefinition)_edsvc.ResourceService.GetResource(layer.ResourceId);
+                var vl = (IVectorLayerDefinition)ldf.SubLayer;
+
+                var fs = (FeatureSourceType)_edsvc.ResourceService.GetResource(vl.FeatureSourceID);
+                
+                string expr = _edsvc.EditExpression(txtFilter.Text, _cls, fs.Provider, vl.FeatureSourceID);
+                if (expr != null)
+                {
+                    txtFilter.Text = expr;
+                }
+            }
+        }
+
+        private void cmbLayers_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (_init)
+                return;
+
+            UpdateColumns();
+        }
+
+        private void UpdateColumns()
+        {
+            var layer = cmbLayers.SelectedItem as MapLayerType;
+            if (layer != null)
+            {
+                _cmd.ResultColumns.Clear();
+
+                var ldf = (ILayerDefinition)_edsvc.ResourceService.GetResource(layer.ResourceId);
+                var vl = (IVectorLayerDefinition)ldf.SubLayer;
+
+                _cls = _edsvc.FeatureService.GetFeatureSourceSchema(vl.FeatureSourceID, vl.FullQualifiedClassName);
+
+                COL_PROPERTY.DisplayMember = "Name";
+                COL_PROPERTY.DataSource = _cls.Columns;
+            }
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/SearchCmdCtrl.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/SearchCmdCtrl.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/Commands/SearchCmdCtrl.resx	2010-07-29 13:13:00 UTC (rev 5059)
@@ -0,0 +1,135 @@
+<?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>
+  <metadata name="COL_NAME.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="COL_PROPERTY.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="COL_NAME.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="COL_PROPERTY.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+</root>
\ No newline at end of file

Modified: sandbox/maestro-3.0/Maestro.Editors/WebLayout/CustomCommandPropertyCtrl.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/CustomCommandPropertyCtrl.Designer.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/CustomCommandPropertyCtrl.Designer.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -30,25 +30,25 @@
         {
             this.tabProperties = new System.Windows.Forms.TabControl();
             this.TAB_BASIC = new System.Windows.Forms.TabPage();
-            this.TAB_ADVANCED = new System.Windows.Forms.TabPage();
-            this.label1 = new System.Windows.Forms.Label();
-            this.txtName = new System.Windows.Forms.TextBox();
+            this.imgDisabled = new System.Windows.Forms.PictureBox();
+            this.imgEnabled = new System.Windows.Forms.PictureBox();
+            this.txtDisabledIcon = new System.Windows.Forms.TextBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.txtEnabledIcon = new System.Windows.Forms.TextBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.txtDescription = new System.Windows.Forms.TextBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.txtTooltip = new System.Windows.Forms.TextBox();
+            this.label3 = new System.Windows.Forms.Label();
             this.txtTitle = new System.Windows.Forms.TextBox();
             this.label2 = new System.Windows.Forms.Label();
-            this.txtTooltip = new System.Windows.Forms.TextBox();
-            this.label3 = new System.Windows.Forms.Label();
-            this.txtDescription = new System.Windows.Forms.TextBox();
-            this.label4 = new System.Windows.Forms.Label();
-            this.txtEnabledIcon = new System.Windows.Forms.TextBox();
-            this.label5 = new System.Windows.Forms.Label();
-            this.txtDisabledIcon = new System.Windows.Forms.TextBox();
-            this.label6 = new System.Windows.Forms.Label();
-            this.imgEnabled = new System.Windows.Forms.PictureBox();
-            this.imgDisabled = new System.Windows.Forms.PictureBox();
+            this.txtName = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.TAB_ADVANCED = new System.Windows.Forms.TabPage();
             this.tabProperties.SuspendLayout();
             this.TAB_BASIC.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.imgDisabled)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.imgEnabled)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imgDisabled)).BeginInit();
             this.SuspendLayout();
             // 
             // tabProperties
@@ -64,6 +64,7 @@
             // 
             // TAB_BASIC
             // 
+            this.TAB_BASIC.AutoScroll = true;
             this.TAB_BASIC.Controls.Add(this.imgDisabled);
             this.TAB_BASIC.Controls.Add(this.imgEnabled);
             this.TAB_BASIC.Controls.Add(this.txtDisabledIcon);
@@ -86,66 +87,64 @@
             this.TAB_BASIC.Text = "Basic";
             this.TAB_BASIC.UseVisualStyleBackColor = true;
             // 
-            // TAB_ADVANCED
+            // imgDisabled
             // 
-            this.TAB_ADVANCED.Location = new System.Drawing.Point(4, 22);
-            this.TAB_ADVANCED.Name = "TAB_ADVANCED";
-            this.TAB_ADVANCED.Padding = new System.Windows.Forms.Padding(3);
-            this.TAB_ADVANCED.Size = new System.Drawing.Size(258, 265);
-            this.TAB_ADVANCED.TabIndex = 1;
-            this.TAB_ADVANCED.Text = "Advanced";
-            this.TAB_ADVANCED.UseVisualStyleBackColor = true;
+            this.imgDisabled.Location = new System.Drawing.Point(85, 146);
+            this.imgDisabled.Name = "imgDisabled";
+            this.imgDisabled.Size = new System.Drawing.Size(18, 18);
+            this.imgDisabled.TabIndex = 13;
+            this.imgDisabled.TabStop = false;
             // 
-            // label1
+            // imgEnabled
             // 
-            this.label1.AutoSize = true;
-            this.label1.Location = new System.Drawing.Point(8, 19);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(35, 13);
-            this.label1.TabIndex = 0;
-            this.label1.Text = "Name";
+            this.imgEnabled.Location = new System.Drawing.Point(85, 122);
+            this.imgEnabled.Name = "imgEnabled";
+            this.imgEnabled.Size = new System.Drawing.Size(18, 18);
+            this.imgEnabled.TabIndex = 12;
+            this.imgEnabled.TabStop = false;
             // 
-            // txtName
+            // txtDisabledIcon
             // 
-            this.txtName.Location = new System.Drawing.Point(85, 16);
-            this.txtName.Name = "txtName";
-            this.txtName.Size = new System.Drawing.Size(158, 20);
-            this.txtName.TabIndex = 1;
+            this.txtDisabledIcon.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtDisabledIcon.Location = new System.Drawing.Point(109, 146);
+            this.txtDisabledIcon.Name = "txtDisabledIcon";
+            this.txtDisabledIcon.Size = new System.Drawing.Size(134, 20);
+            this.txtDisabledIcon.TabIndex = 11;
+            this.txtDisabledIcon.TextChanged += new System.EventHandler(this.txtDisabledIcon_TextChanged);
             // 
-            // txtTitle
+            // label6
             // 
-            this.txtTitle.Location = new System.Drawing.Point(85, 42);
-            this.txtTitle.Name = "txtTitle";
-            this.txtTitle.Size = new System.Drawing.Size(158, 20);
-            this.txtTitle.TabIndex = 3;
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(8, 149);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(72, 13);
+            this.label6.TabIndex = 10;
+            this.label6.Text = "Disabled Icon";
             // 
-            // label2
+            // txtEnabledIcon
             // 
-            this.label2.AutoSize = true;
-            this.label2.Location = new System.Drawing.Point(8, 45);
-            this.label2.Name = "label2";
-            this.label2.Size = new System.Drawing.Size(27, 13);
-            this.label2.TabIndex = 2;
-            this.label2.Text = "Title";
+            this.txtEnabledIcon.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtEnabledIcon.Location = new System.Drawing.Point(109, 120);
+            this.txtEnabledIcon.Name = "txtEnabledIcon";
+            this.txtEnabledIcon.Size = new System.Drawing.Size(134, 20);
+            this.txtEnabledIcon.TabIndex = 9;
+            this.txtEnabledIcon.TextChanged += new System.EventHandler(this.txtEnabledIcon_TextChanged);
             // 
-            // txtTooltip
+            // label5
             // 
-            this.txtTooltip.Location = new System.Drawing.Point(85, 68);
-            this.txtTooltip.Name = "txtTooltip";
-            this.txtTooltip.Size = new System.Drawing.Size(158, 20);
-            this.txtTooltip.TabIndex = 5;
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(8, 123);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(70, 13);
+            this.label5.TabIndex = 8;
+            this.label5.Text = "Enabled Icon";
             // 
-            // label3
-            // 
-            this.label3.AutoSize = true;
-            this.label3.Location = new System.Drawing.Point(8, 71);
-            this.label3.Name = "label3";
-            this.label3.Size = new System.Drawing.Size(39, 13);
-            this.label3.TabIndex = 4;
-            this.label3.Text = "Tooltip";
-            // 
             // txtDescription
             // 
+            this.txtDescription.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
             this.txtDescription.Location = new System.Drawing.Point(85, 94);
             this.txtDescription.Name = "txtDescription";
             this.txtDescription.Size = new System.Drawing.Size(158, 20);
@@ -160,54 +159,71 @@
             this.label4.TabIndex = 6;
             this.label4.Text = "Description";
             // 
-            // txtEnabledIcon
+            // txtTooltip
             // 
-            this.txtEnabledIcon.Location = new System.Drawing.Point(109, 120);
-            this.txtEnabledIcon.Name = "txtEnabledIcon";
-            this.txtEnabledIcon.Size = new System.Drawing.Size(134, 20);
-            this.txtEnabledIcon.TabIndex = 9;
+            this.txtTooltip.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtTooltip.Location = new System.Drawing.Point(85, 68);
+            this.txtTooltip.Name = "txtTooltip";
+            this.txtTooltip.Size = new System.Drawing.Size(158, 20);
+            this.txtTooltip.TabIndex = 5;
             // 
-            // label5
+            // label3
             // 
-            this.label5.AutoSize = true;
-            this.label5.Location = new System.Drawing.Point(8, 123);
-            this.label5.Name = "label5";
-            this.label5.Size = new System.Drawing.Size(70, 13);
-            this.label5.TabIndex = 8;
-            this.label5.Text = "Enabled Icon";
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(8, 71);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(39, 13);
+            this.label3.TabIndex = 4;
+            this.label3.Text = "Tooltip";
             // 
-            // txtDisabledIcon
+            // txtTitle
             // 
-            this.txtDisabledIcon.Location = new System.Drawing.Point(109, 146);
-            this.txtDisabledIcon.Name = "txtDisabledIcon";
-            this.txtDisabledIcon.Size = new System.Drawing.Size(134, 20);
-            this.txtDisabledIcon.TabIndex = 11;
+            this.txtTitle.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtTitle.Location = new System.Drawing.Point(85, 42);
+            this.txtTitle.Name = "txtTitle";
+            this.txtTitle.Size = new System.Drawing.Size(158, 20);
+            this.txtTitle.TabIndex = 3;
             // 
-            // label6
+            // label2
             // 
-            this.label6.AutoSize = true;
-            this.label6.Location = new System.Drawing.Point(8, 149);
-            this.label6.Name = "label6";
-            this.label6.Size = new System.Drawing.Size(72, 13);
-            this.label6.TabIndex = 10;
-            this.label6.Text = "Disabled Icon";
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(8, 45);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(27, 13);
+            this.label2.TabIndex = 2;
+            this.label2.Text = "Title";
             // 
-            // imgEnabled
+            // txtName
             // 
-            this.imgEnabled.Location = new System.Drawing.Point(85, 122);
-            this.imgEnabled.Name = "imgEnabled";
-            this.imgEnabled.Size = new System.Drawing.Size(18, 18);
-            this.imgEnabled.TabIndex = 12;
-            this.imgEnabled.TabStop = false;
+            this.txtName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtName.Location = new System.Drawing.Point(85, 16);
+            this.txtName.Name = "txtName";
+            this.txtName.Size = new System.Drawing.Size(158, 20);
+            this.txtName.TabIndex = 1;
             // 
-            // imgDisabled
+            // label1
             // 
-            this.imgDisabled.Location = new System.Drawing.Point(85, 146);
-            this.imgDisabled.Name = "imgDisabled";
-            this.imgDisabled.Size = new System.Drawing.Size(18, 18);
-            this.imgDisabled.TabIndex = 13;
-            this.imgDisabled.TabStop = false;
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(8, 19);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(35, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Name";
             // 
+            // TAB_ADVANCED
+            // 
+            this.TAB_ADVANCED.AutoScroll = true;
+            this.TAB_ADVANCED.Location = new System.Drawing.Point(4, 22);
+            this.TAB_ADVANCED.Name = "TAB_ADVANCED";
+            this.TAB_ADVANCED.Padding = new System.Windows.Forms.Padding(3);
+            this.TAB_ADVANCED.Size = new System.Drawing.Size(258, 265);
+            this.TAB_ADVANCED.TabIndex = 1;
+            this.TAB_ADVANCED.Text = "Advanced";
+            this.TAB_ADVANCED.UseVisualStyleBackColor = true;
+            // 
             // CustomCommandPropertyCtrl
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -218,8 +234,8 @@
             this.tabProperties.ResumeLayout(false);
             this.TAB_BASIC.ResumeLayout(false);
             this.TAB_BASIC.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.imgDisabled)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.imgEnabled)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.imgDisabled)).EndInit();
             this.ResumeLayout(false);
 
         }

Modified: sandbox/maestro-3.0/Maestro.Editors/WebLayout/CustomCommandPropertyCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/CustomCommandPropertyCtrl.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/CustomCommandPropertyCtrl.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -24,14 +24,99 @@
 using System.Data;
 using System.Text;
 using System.Windows.Forms;
+using Maestro.Shared.UI;
+using OSGeo.MapGuide.ObjectModels.WebLayout;
+using Maestro.Editors.WebLayout.Commands;
 
 namespace Maestro.Editors.WebLayout
 {
-    public partial class CustomCommandPropertyCtrl : UserControl
+    public partial class CustomCommandPropertyCtrl : EditorBase
     {
         public CustomCommandPropertyCtrl()
         {
             InitializeComponent();
         }
+
+        private IEditorService _edsvc;
+
+        public override void Bind(IEditorService service)
+        {
+            _edsvc = service;
+        }
+
+        private OSGeo.MapGuide.ObjectModels.WebLayout.CommandType _command;
+
+        internal void Bind(OSGeo.MapGuide.ObjectModels.WebLayout.CommandType command, IEditorService service)
+        {
+            Bind(service);
+
+            TextBoxBinder.BindText(txtDescription, command, "Description");
+            TextBoxBinder.BindText(txtDisabledIcon, command, "DisabledImageURL");
+            TextBoxBinder.BindText(txtEnabledIcon, command, "ImageURL");
+            TextBoxBinder.BindText(txtName, command, "Name");
+            TextBoxBinder.BindText(txtTitle, command, "Label");
+            TextBoxBinder.BindText(txtTooltip, command, "Tooltip");
+
+            if (typeof(InvokeScriptCommandType).IsAssignableFrom(command.GetType()))
+            {
+                var ctrl = new InvokeScriptCtrl();
+                ctrl.Bind((InvokeScriptCommandType)command, service);
+                ctrl.Dock = DockStyle.Fill;
+                TAB_ADVANCED.Controls.Add(ctrl);
+            }
+            else if (typeof(InvokeURLCommandType).IsAssignableFrom(command.GetType()))
+            {
+                var ctrl = new InvokeURLCtrl();
+                ctrl.Bind((InvokeURLCommandType)command, service);
+                ctrl.Dock = DockStyle.Fill;
+                TAB_ADVANCED.Controls.Add(ctrl);
+            }
+            else if (typeof(SearchCommandType).IsAssignableFrom(command.GetType()))
+            {
+                var ctrl = new SearchCmdCtrl();
+                ctrl.Bind((SearchCommandType)command, service);
+                ctrl.Dock = DockStyle.Fill;
+                TAB_ADVANCED.Controls.Add(ctrl);
+            }
+            else
+            {
+                //Not editable
+                txtTooltip.ReadOnly = true;
+                txtDescription.ReadOnly = true;
+                txtDisabledIcon.ReadOnly = true;
+                txtEnabledIcon.ReadOnly = true;
+                txtName.ReadOnly = true;
+                txtTitle.ReadOnly = true;
+                txtTooltip.ReadOnly = true;
+
+                tabProperties.TabPages.Remove(TAB_ADVANCED);
+            }
+        }
+
+        private void txtEnabledIcon_TextChanged(object sender, EventArgs e)
+        {
+            var img = CommandIconCache.GetStandardCommandIcon(txtEnabledIcon.Text);
+            if (img != null)
+            {
+                imgEnabled.Image = img;
+            }
+            else
+            {
+                imgEnabled.Image = Properties.Resources.cross_circle_frame;
+            }
+        }
+
+        private void txtDisabledIcon_TextChanged(object sender, EventArgs e)
+        {
+            var img = CommandIconCache.GetStandardCommandIcon(txtDisabledIcon.Text);
+            if (img != null)
+            {
+                imgDisabled.Image = img;
+            }
+            else
+            {
+                imgDisabled.Image = Properties.Resources.cross_circle_frame;
+            }
+        }
     }
 }

Added: sandbox/maestro-3.0/Maestro.Editors/WebLayout/MenuEditorCtrl.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/MenuEditorCtrl.Designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/MenuEditorCtrl.Designer.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -0,0 +1,208 @@
+namespace Maestro.Editors.WebLayout
+{
+    partial class MenuEditorCtrl
+    {
+        /// <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.toolStrip2 = new System.Windows.Forms.ToolStrip();
+            this.toolStripDropDownButton1 = new System.Windows.Forms.ToolStripDropDownButton();
+            this.mnuBuiltin = new System.Windows.Forms.ToolStripMenuItem();
+            this.mnuCustom = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
+            this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem();
+            this.btnDelete = new System.Windows.Forms.ToolStripButton();
+            this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
+            this.btnMoveUp = new System.Windows.Forms.ToolStripButton();
+            this.btnMoveDown = new System.Windows.Forms.ToolStripButton();
+            this.trvMenuItems = new Aga.Controls.Tree.TreeViewAdv();
+            this.nodeTextBox1 = new Aga.Controls.Tree.NodeControls.NodeTextBox();
+            this.nodeIcon1 = new Aga.Controls.Tree.NodeControls.NodeIcon();
+            this.toolStrip2.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // toolStrip2
+            // 
+            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.toolStripDropDownButton1,
+            this.btnDelete,
+            this.toolStripSeparator4,
+            this.btnMoveUp,
+            this.btnMoveDown});
+            this.toolStrip2.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip2.Name = "toolStrip2";
+            this.toolStrip2.Size = new System.Drawing.Size(150, 25);
+            this.toolStrip2.TabIndex = 1;
+            this.toolStrip2.Text = "toolStrip2";
+            // 
+            // toolStripDropDownButton1
+            // 
+            this.toolStripDropDownButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            this.toolStripDropDownButton1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.mnuBuiltin,
+            this.mnuCustom,
+            this.toolStripSeparator3,
+            this.toolStripMenuItem3,
+            this.toolStripMenuItem4});
+            this.toolStripDropDownButton1.Image = global::Maestro.Editors.Properties.Resources.application__plus;
+            this.toolStripDropDownButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.toolStripDropDownButton1.Name = "toolStripDropDownButton1";
+            this.toolStripDropDownButton1.Size = new System.Drawing.Size(29, 22);
+            this.toolStripDropDownButton1.Text = "toolStripButton1";
+            // 
+            // mnuBuiltin
+            // 
+            this.mnuBuiltin.Name = "mnuBuiltin";
+            this.mnuBuiltin.Size = new System.Drawing.Size(160, 22);
+            this.mnuBuiltin.Text = "Built-In Command";
+            // 
+            // mnuCustom
+            // 
+            this.mnuCustom.Name = "mnuCustom";
+            this.mnuCustom.Size = new System.Drawing.Size(160, 22);
+            this.mnuCustom.Text = "Custom Command";
+            // 
+            // toolStripSeparator3
+            // 
+            this.toolStripSeparator3.Name = "toolStripSeparator3";
+            this.toolStripSeparator3.Size = new System.Drawing.Size(157, 6);
+            // 
+            // toolStripMenuItem3
+            // 
+            this.toolStripMenuItem3.Image = global::Maestro.Editors.Properties.Resources.ui_splitter_horizontal;
+            this.toolStripMenuItem3.Name = "toolStripMenuItem3";
+            this.toolStripMenuItem3.Size = new System.Drawing.Size(160, 22);
+            this.toolStripMenuItem3.Text = "Separator";
+            this.toolStripMenuItem3.Click += new System.EventHandler(this.addSeparator_Click);
+            // 
+            // toolStripMenuItem4
+            // 
+            this.toolStripMenuItem4.Image = global::Maestro.Editors.Properties.Resources.ui_menu;
+            this.toolStripMenuItem4.Name = "toolStripMenuItem4";
+            this.toolStripMenuItem4.Size = new System.Drawing.Size(160, 22);
+            this.toolStripMenuItem4.Text = "Flyout Menu";
+            this.toolStripMenuItem4.Click += new System.EventHandler(this.addFlyout_Click);
+            // 
+            // btnDelete
+            // 
+            this.btnDelete.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            this.btnDelete.Enabled = false;
+            this.btnDelete.Image = global::Maestro.Editors.Properties.Resources.cross_script;
+            this.btnDelete.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnDelete.Name = "btnDelete";
+            this.btnDelete.Size = new System.Drawing.Size(23, 22);
+            this.btnDelete.Text = "toolStripButton2";
+            // 
+            // toolStripSeparator4
+            // 
+            this.toolStripSeparator4.Name = "toolStripSeparator4";
+            this.toolStripSeparator4.Size = new System.Drawing.Size(6, 25);
+            // 
+            // btnMoveUp
+            // 
+            this.btnMoveUp.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            this.btnMoveUp.Enabled = false;
+            this.btnMoveUp.Image = global::Maestro.Editors.Properties.Resources.arrow_090;
+            this.btnMoveUp.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnMoveUp.Name = "btnMoveUp";
+            this.btnMoveUp.Size = new System.Drawing.Size(23, 22);
+            this.btnMoveUp.Text = "toolStripButton3";
+            // 
+            // btnMoveDown
+            // 
+            this.btnMoveDown.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            this.btnMoveDown.Enabled = false;
+            this.btnMoveDown.Image = global::Maestro.Editors.Properties.Resources.arrow_270;
+            this.btnMoveDown.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnMoveDown.Name = "btnMoveDown";
+            this.btnMoveDown.Size = new System.Drawing.Size(23, 22);
+            this.btnMoveDown.Text = "toolStripButton4";
+            // 
+            // trvMenuItems
+            // 
+            this.trvMenuItems.BackColor = System.Drawing.SystemColors.Window;
+            this.trvMenuItems.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.trvMenuItems.DefaultToolTipProvider = null;
+            this.trvMenuItems.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.trvMenuItems.DragDropMarkColor = System.Drawing.Color.Black;
+            this.trvMenuItems.LineColor = System.Drawing.SystemColors.ControlDark;
+            this.trvMenuItems.Location = new System.Drawing.Point(0, 25);
+            this.trvMenuItems.Model = null;
+            this.trvMenuItems.Name = "trvMenuItems";
+            this.trvMenuItems.NodeControls.Add(this.nodeIcon1);
+            this.trvMenuItems.NodeControls.Add(this.nodeTextBox1);
+            this.trvMenuItems.SelectedNode = null;
+            this.trvMenuItems.Size = new System.Drawing.Size(150, 125);
+            this.trvMenuItems.TabIndex = 2;
+            this.trvMenuItems.SelectionChanged += new System.EventHandler(this.trvMenuItems_SelectionChanged);
+            // 
+            // nodeTextBox1
+            // 
+            this.nodeTextBox1.DataPropertyName = "Label";
+            this.nodeTextBox1.IncrementalSearchEnabled = true;
+            this.nodeTextBox1.LeftMargin = 3;
+            this.nodeTextBox1.ParentColumn = null;
+            // 
+            // nodeIcon1
+            // 
+            this.nodeIcon1.DataPropertyName = "Icon";
+            this.nodeIcon1.LeftMargin = 1;
+            this.nodeIcon1.ParentColumn = null;
+            this.nodeIcon1.ScaleMode = Aga.Controls.Tree.ImageScaleMode.Clip;
+            // 
+            // MenuEditorCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.trvMenuItems);
+            this.Controls.Add(this.toolStrip2);
+            this.Name = "MenuEditorCtrl";
+            this.toolStrip2.ResumeLayout(false);
+            this.toolStrip2.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip2;
+        private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton1;
+        private System.Windows.Forms.ToolStripMenuItem mnuBuiltin;
+        private System.Windows.Forms.ToolStripMenuItem mnuCustom;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
+        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3;
+        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem4;
+        private System.Windows.Forms.ToolStripButton btnDelete;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
+        private System.Windows.Forms.ToolStripButton btnMoveUp;
+        private System.Windows.Forms.ToolStripButton btnMoveDown;
+        private Aga.Controls.Tree.TreeViewAdv trvMenuItems;
+        private Aga.Controls.Tree.NodeControls.NodeIcon nodeIcon1;
+        private Aga.Controls.Tree.NodeControls.NodeTextBox nodeTextBox1;
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/WebLayout/MenuEditorCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/MenuEditorCtrl.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/MenuEditorCtrl.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -0,0 +1,325 @@
+#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 Aga.Controls.Tree;
+using OSGeo.MapGuide.ObjectModels.WebLayout;
+using System.Diagnostics;
+
+namespace Maestro.Editors.WebLayout
+{
+    public partial class MenuEditorCtrl : EditorBase
+    {
+        public MenuEditorCtrl()
+        {
+            InitializeComponent();
+        }
+
+        public ITreeModel Model
+        {
+            get { return trvMenuItems.Model; }
+            set { trvMenuItems.Model = value; }
+        }
+
+        public override void Bind(IEditorService service)
+        {
+            
+        }
+
+        protected override void UnsubscribeEventHandlers()
+        {
+            if (_wl != null && _wl.CommandSet != null)
+                _wl.CommandSet.ListChanged -= CommandSet_ListChanged;
+
+            base.UnsubscribeEventHandlers();
+        }
+
+        private WebLayoutType _wl;
+
+        public void Bind(IEditorService service, WebLayoutType wl)
+        {
+            Bind(service);
+            _wl = wl;
+            _wl.CommandSet.ListChanged += CommandSet_ListChanged;
+
+            InitBuiltinCommandMenu();
+            InitCustomCommandMenu();
+        }
+
+        void CommandSet_ListChanged(object sender, ListChangedEventArgs e)
+        {
+            switch (e.ListChangedType)
+            {
+                case ListChangedType.ItemAdded:
+                    {
+
+                    }
+                    break;
+                case ListChangedType.ItemDeleted:
+                    {
+
+                    }
+                    break;
+            }
+        }
+
+        private void InitCustomCommandMenu()
+        {
+            foreach (var cmd in _wl.GetCustomCommands())
+            {
+                AddCustomCommandEntry(mnuCustom, cmd);
+            }
+        }
+
+        private void InitBuiltinCommandMenu()
+        {
+            foreach (BuiltInCommandType type in Enum.GetValues(typeof(BuiltInCommandType)))
+            {
+                ToolStripMenuItem mi = new ToolStripMenuItem(type.ToString(), CommandIconCache.GetStandardCommandIcon(type), new EventHandler(OnAddBuiltInCommand));
+                mi.Tag = type;
+                mnuBuiltin.DropDown.Items.Add(mi);
+            }
+        }
+
+        private void RemoveCustomCommandEntry(ToolStripMenuItem tsi, OSGeo.MapGuide.ObjectModels.WebLayout.CommandType cmd)
+        {
+            ToolStripItem find = null;
+            foreach (ToolStripItem ti in tsi.DropDown.Items)
+            {
+                if (ti.Tag == cmd)
+                {
+                    find = ti;
+                    break;
+                }
+            }
+            if (find != null)
+            {
+                tsi.DropDown.Items.Remove(find);
+            }
+        }
+
+        private void AddCustomCommandEntry(ToolStripMenuItem tsi, OSGeo.MapGuide.ObjectModels.WebLayout.CommandType cmd)
+        {
+            var icon = CommandIconCache.GetStandardCommandIcon(cmd.ImageURL);
+            if (icon == null)
+                icon = Properties.Resources.question;
+
+            ToolStripMenuItem mi = new ToolStripMenuItem(cmd.Name, icon, new EventHandler(OnAddCustomCommand));
+            mi.Tag = cmd;
+            tsi.DropDown.Items.Add(mi);
+        }
+
+        private void OnAddBuiltInCommand(object sender, EventArgs e)
+        {
+            var tsi = sender as ToolStripItem;
+            if (tsi != null && tsi.Tag != null)
+            {
+                BuiltInCommandType cmdType = (BuiltInCommandType)tsi.Tag;
+
+                //Append to end of model of active treeview
+            }
+        }
+
+        private void OnAddCustomCommand(object sender, EventArgs e)
+        {
+            var tsi = sender as ToolStripItem;
+            if (tsi != null && tsi.Tag != null)
+            {
+                var cmd = (OSGeo.MapGuide.ObjectModels.WebLayout.CommandType)tsi.Tag;
+
+                //Append to end of model of active treeview
+            }
+        }
+
+        private void addSeparator_Click(object sender, EventArgs e)
+        {
+
+        }
+
+        private void addFlyout_Click(object sender, EventArgs e)
+        {
+
+        }
+
+        private void trvMenuItems_SelectionChanged(object sender, EventArgs e)
+        {
+        
+        }
+    }
+
+    internal abstract class ItemBase
+    {
+        public abstract string Label { get; }
+
+        public abstract Image Icon { get; }
+    }
+
+    internal class CommandItem : ItemBase
+    {
+        private CommandItemType _cmd;
+
+        public CommandItem(CommandItemType item, Image icon)
+        {
+            _cmd = item;
+            if (icon == null)
+                _icon = Properties.Resources.question;
+            else
+                _icon = icon;
+        }
+
+        public override string Label
+        {
+            get
+            {
+                return _cmd.Command;
+            }
+        }
+
+        private Image _icon;
+
+        public override Image Icon
+        {
+            get { return _icon; }
+        }
+    }
+
+    internal class SeparatorItem : ItemBase
+    {
+        private SeparatorItemType _sep;
+
+        public SeparatorItem(SeparatorItemType sep)
+        {
+            _sep = sep;
+        }
+
+        public override string Label
+        {
+            get { return _sep.Function.ToString(); }
+        }
+
+        public override Image Icon
+        {
+            get { return Properties.Resources.ui_splitter_horizontal; }
+        }
+    }
+
+    internal class FlyoutItem : ItemBase
+    {
+        private FlyoutItemType _fly;
+
+        public FlyoutItem(FlyoutItemType fly)
+        {
+            _fly = fly;
+        }
+
+        public override string Label
+        {
+            get { return _fly.Label; }
+        }
+
+        public override Image Icon
+        {
+            get { return Properties.Resources.ui_menu; }
+        }
+
+        public IEnumerable<UIItemType> SubItem
+        {
+            get { return _fly.SubItem; }
+        }
+    }
+
+    internal class MenuTreeModel : ITreeModel
+    {
+        private IList<UIItemType> _items;
+        private WebLayoutType _wl;
+
+        public MenuTreeModel(IList<UIItemType> items, WebLayoutType wl)
+        {
+            _items = items;
+            _wl = wl;
+        }
+
+        public System.Collections.IEnumerable GetChildren(TreePath treePath)
+        {
+            if (treePath.IsEmpty())
+            {
+                foreach (var item in _items)
+                {
+                    if (item.Function == UIItemFunctionType.Command)
+                    {
+                        var ci = (CommandItemType)item;
+                        var cmd = _wl.GetCommandByName(ci.Command);
+                        Debug.Assert(cmd != null);
+
+                        yield return new CommandItem(ci, CommandIconCache.GetStandardCommandIcon(cmd.ImageURL));
+                    }
+                    else if (item.Function == UIItemFunctionType.Flyout)
+                        yield return new FlyoutItem((FlyoutItemType)item);
+                    else
+                        yield return new SeparatorItem((SeparatorItemType)item);
+                }
+            }
+            else
+            {
+                var flyout = treePath.LastNode as FlyoutItem;
+                if (flyout != null)
+                {
+                    foreach (var item in flyout.SubItem)
+                    {
+                        if (item.Function == UIItemFunctionType.Command)
+                        {
+                            var ci = (CommandItemType)item;
+                            var cmd = _wl.GetCommandByName(ci.Command);
+                            Debug.Assert(cmd != null);
+
+                            yield return new CommandItem(ci, CommandIconCache.GetStandardCommandIcon(cmd.ImageURL));
+                        }
+                        else if (item.Function == UIItemFunctionType.Flyout)
+                            yield return new FlyoutItem((FlyoutItemType)item);
+                        else
+                            yield return new SeparatorItem((SeparatorItemType)item);
+                    }
+                }
+                else
+                {
+                    yield break;
+                }
+            }
+        }
+
+        public bool IsLeaf(TreePath treePath)
+        {
+            return (treePath.LastNode as FlyoutItem) == null;
+        }
+
+        public event EventHandler<TreeModelEventArgs> NodesChanged;
+
+        public event EventHandler<TreeModelEventArgs> NodesInserted;
+
+        public event EventHandler<TreeModelEventArgs> NodesRemoved;
+
+        public event EventHandler<TreePathEventArgs> StructureChanged;
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/WebLayout/MenuEditorCtrl.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/MenuEditorCtrl.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/MenuEditorCtrl.resx	2010-07-29 13:13:00 UTC (rev 5059)
@@ -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="toolStrip2.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

Modified: sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutCommandsCtrl.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutCommandsCtrl.Designer.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutCommandsCtrl.Designer.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -28,8 +28,9 @@
         /// </summary>
         private void InitializeComponent()
         {
+            this.splitContainer1 = new System.Windows.Forms.SplitContainer();
             this.groupBox1 = new System.Windows.Forms.GroupBox();
-            this.dataGridView1 = new System.Windows.Forms.DataGridView();
+            this.grdCommands = new System.Windows.Forms.DataGridView();
             this.toolStrip1 = new System.Windows.Forms.ToolStrip();
             this.btnAdd = new System.Windows.Forms.ToolStripDropDownButton();
             this.invokeURLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -38,45 +39,65 @@
             this.btnDelete = new System.Windows.Forms.ToolStripButton();
             this.btnExport = new System.Windows.Forms.ToolStripButton();
             this.btnImport = new System.Windows.Forms.ToolStripButton();
-            this.btnCopyTo = new System.Windows.Forms.ToolStripButton();
-            this.groupBox2 = new System.Windows.Forms.GroupBox();
+            this.grpCommand = new System.Windows.Forms.GroupBox();
             this.contentPanel.SuspendLayout();
+            this.splitContainer1.Panel1.SuspendLayout();
+            this.splitContainer1.Panel2.SuspendLayout();
+            this.splitContainer1.SuspendLayout();
             this.groupBox1.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.grdCommands)).BeginInit();
             this.toolStrip1.SuspendLayout();
             this.SuspendLayout();
             // 
             // contentPanel
             // 
-            this.contentPanel.Controls.Add(this.groupBox2);
-            this.contentPanel.Controls.Add(this.groupBox1);
+            this.contentPanel.Controls.Add(this.splitContainer1);
             this.contentPanel.Size = new System.Drawing.Size(733, 292);
             // 
+            // splitContainer1
+            // 
+            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+            this.splitContainer1.Name = "splitContainer1";
+            // 
+            // splitContainer1.Panel1
+            // 
+            this.splitContainer1.Panel1.Controls.Add(this.groupBox1);
+            // 
+            // splitContainer1.Panel2
+            // 
+            this.splitContainer1.Panel2.Controls.Add(this.grpCommand);
+            this.splitContainer1.Size = new System.Drawing.Size(733, 292);
+            this.splitContainer1.SplitterDistance = 439;
+            this.splitContainer1.TabIndex = 0;
+            // 
             // groupBox1
             // 
             this.groupBox1.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.groupBox1.Controls.Add(this.dataGridView1);
+            this.groupBox1.Controls.Add(this.grdCommands);
             this.groupBox1.Controls.Add(this.toolStrip1);
-            this.groupBox1.Location = new System.Drawing.Point(13, 7);
+            this.groupBox1.Location = new System.Drawing.Point(3, 6);
             this.groupBox1.Name = "groupBox1";
-            this.groupBox1.Size = new System.Drawing.Size(483, 272);
-            this.groupBox1.TabIndex = 0;
+            this.groupBox1.Size = new System.Drawing.Size(433, 272);
+            this.groupBox1.TabIndex = 2;
             this.groupBox1.TabStop = false;
             this.groupBox1.Text = "Custom Commands";
             // 
-            // dataGridView1
+            // grdCommands
             // 
-            this.dataGridView1.AllowUserToAddRows = false;
-            this.dataGridView1.AllowUserToDeleteRows = false;
-            this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-            this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.dataGridView1.Location = new System.Drawing.Point(3, 41);
-            this.dataGridView1.Name = "dataGridView1";
-            this.dataGridView1.ReadOnly = true;
-            this.dataGridView1.Size = new System.Drawing.Size(477, 228);
-            this.dataGridView1.TabIndex = 1;
+            this.grdCommands.AllowUserToAddRows = false;
+            this.grdCommands.AllowUserToDeleteRows = false;
+            this.grdCommands.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.grdCommands.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.grdCommands.Location = new System.Drawing.Point(3, 41);
+            this.grdCommands.Name = "grdCommands";
+            this.grdCommands.ReadOnly = true;
+            this.grdCommands.Size = new System.Drawing.Size(427, 228);
+            this.grdCommands.TabIndex = 1;
+            this.grdCommands.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.grdCommands_CellContentClick);
+            this.grdCommands.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.grdCommands_CellContentClick);
             // 
             // toolStrip1
             // 
@@ -84,11 +105,10 @@
             this.btnAdd,
             this.btnDelete,
             this.btnExport,
-            this.btnImport,
-            this.btnCopyTo});
+            this.btnImport});
             this.toolStrip1.Location = new System.Drawing.Point(3, 16);
             this.toolStrip1.Name = "toolStrip1";
-            this.toolStrip1.Size = new System.Drawing.Size(477, 25);
+            this.toolStrip1.Size = new System.Drawing.Size(427, 25);
             this.toolStrip1.TabIndex = 0;
             this.toolStrip1.Text = "toolStrip1";
             // 
@@ -101,76 +121,76 @@
             this.btnAdd.Image = global::Maestro.Editors.Properties.Resources.application__plus;
             this.btnAdd.ImageTransparentColor = System.Drawing.Color.Magenta;
             this.btnAdd.Name = "btnAdd";
-            this.btnAdd.Size = new System.Drawing.Size(58, 22);
+            this.btnAdd.Size = new System.Drawing.Size(55, 22);
             this.btnAdd.Text = "Add";
             // 
             // invokeURLToolStripMenuItem
             // 
-            this.invokeURLToolStripMenuItem.Image = global::Maestro.Editors.Properties.Resources.globe__arrow;
+            this.invokeURLToolStripMenuItem.Image = global::Maestro.Editors.Properties.Resources.icon_invokeurl;
             this.invokeURLToolStripMenuItem.Name = "invokeURLToolStripMenuItem";
             this.invokeURLToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
             this.invokeURLToolStripMenuItem.Text = "Invoke URL";
+            this.invokeURLToolStripMenuItem.Click += new System.EventHandler(this.invokeURLToolStripMenuItem_Click);
             // 
             // invokeScriptToolStripMenuItem
             // 
-            this.invokeScriptToolStripMenuItem.Image = global::Maestro.Editors.Properties.Resources.script__arrow;
+            this.invokeScriptToolStripMenuItem.Image = global::Maestro.Editors.Properties.Resources.icon_invokescript;
             this.invokeScriptToolStripMenuItem.Name = "invokeScriptToolStripMenuItem";
             this.invokeScriptToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
             this.invokeScriptToolStripMenuItem.Text = "Invoke Script";
+            this.invokeScriptToolStripMenuItem.Click += new System.EventHandler(this.invokeScriptToolStripMenuItem_Click);
             // 
             // searchToolStripMenuItem
             // 
-            this.searchToolStripMenuItem.Image = global::Maestro.Editors.Properties.Resources.application_search_result;
+            this.searchToolStripMenuItem.Image = global::Maestro.Editors.Properties.Resources.icon_search;
             this.searchToolStripMenuItem.Name = "searchToolStripMenuItem";
             this.searchToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
             this.searchToolStripMenuItem.Text = "Search";
+            this.searchToolStripMenuItem.Click += new System.EventHandler(this.searchToolStripMenuItem_Click);
             // 
             // btnDelete
             // 
+            this.btnDelete.Enabled = false;
             this.btnDelete.Image = global::Maestro.Editors.Properties.Resources.application__minus;
             this.btnDelete.ImageTransparentColor = System.Drawing.Color.Magenta;
             this.btnDelete.Name = "btnDelete";
-            this.btnDelete.Size = new System.Drawing.Size(60, 22);
+            this.btnDelete.Size = new System.Drawing.Size(58, 22);
             this.btnDelete.Text = "Delete";
             this.btnDelete.ToolTipText = "Delete selected command";
+            this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
             // 
             // btnExport
             // 
+            this.btnExport.Enabled = false;
             this.btnExport.Image = global::Maestro.Editors.Properties.Resources.application_export;
             this.btnExport.ImageTransparentColor = System.Drawing.Color.Magenta;
             this.btnExport.Name = "btnExport";
-            this.btnExport.Size = new System.Drawing.Size(60, 22);
+            this.btnExport.Size = new System.Drawing.Size(59, 22);
             this.btnExport.Text = "Export";
             this.btnExport.ToolTipText = "Export commands to a XML file";
+            this.btnExport.Click += new System.EventHandler(this.btnExport_Click);
             // 
             // btnImport
             // 
             this.btnImport.Image = global::Maestro.Editors.Properties.Resources.application_import;
             this.btnImport.ImageTransparentColor = System.Drawing.Color.Magenta;
             this.btnImport.Name = "btnImport";
-            this.btnImport.Size = new System.Drawing.Size(63, 22);
+            this.btnImport.Size = new System.Drawing.Size(59, 22);
             this.btnImport.Text = "Import";
             this.btnImport.ToolTipText = "Import commands from an XML file";
+            this.btnImport.Click += new System.EventHandler(this.btnImport_Click);
             // 
-            // btnCopyTo
+            // grpCommand
             // 
-            this.btnCopyTo.Image = global::Maestro.Editors.Properties.Resources.application__arrow;
-            this.btnCopyTo.ImageTransparentColor = System.Drawing.Color.Magenta;
-            this.btnCopyTo.Name = "btnCopyTo";
-            this.btnCopyTo.Size = new System.Drawing.Size(72, 22);
-            this.btnCopyTo.Text = "Copy To";
-            this.btnCopyTo.ToolTipText = "Copies the selected commands to another Web Layout";
-            // 
-            // groupBox2
-            // 
-            this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+            this.grpCommand.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)
                         | System.Windows.Forms.AnchorStyles.Right)));
-            this.groupBox2.Location = new System.Drawing.Point(502, 7);
-            this.groupBox2.Name = "groupBox2";
-            this.groupBox2.Size = new System.Drawing.Size(218, 272);
-            this.groupBox2.TabIndex = 1;
-            this.groupBox2.TabStop = false;
-            this.groupBox2.Text = "Custom Command Properties";
+            this.grpCommand.Location = new System.Drawing.Point(3, 6);
+            this.grpCommand.Name = "grpCommand";
+            this.grpCommand.Size = new System.Drawing.Size(284, 272);
+            this.grpCommand.TabIndex = 3;
+            this.grpCommand.TabStop = false;
+            this.grpCommand.Text = "Custom Command Properties";
             // 
             // WebLayoutCommandsCtrl
             // 
@@ -180,9 +200,12 @@
             this.Name = "WebLayoutCommandsCtrl";
             this.Size = new System.Drawing.Size(733, 319);
             this.contentPanel.ResumeLayout(false);
+            this.splitContainer1.Panel1.ResumeLayout(false);
+            this.splitContainer1.Panel2.ResumeLayout(false);
+            this.splitContainer1.ResumeLayout(false);
             this.groupBox1.ResumeLayout(false);
             this.groupBox1.PerformLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.grdCommands)).EndInit();
             this.toolStrip1.ResumeLayout(false);
             this.toolStrip1.PerformLayout();
             this.ResumeLayout(false);
@@ -191,17 +214,18 @@
 
         #endregion
 
-        private System.Windows.Forms.GroupBox groupBox2;
+        private System.Windows.Forms.SplitContainer splitContainer1;
+        private System.Windows.Forms.GroupBox grpCommand;
         private System.Windows.Forms.GroupBox groupBox1;
-        private System.Windows.Forms.DataGridView dataGridView1;
+        private System.Windows.Forms.DataGridView grdCommands;
         private System.Windows.Forms.ToolStrip toolStrip1;
-        private System.Windows.Forms.ToolStripButton btnDelete;
-        private System.Windows.Forms.ToolStripButton btnExport;
-        private System.Windows.Forms.ToolStripButton btnImport;
-        private System.Windows.Forms.ToolStripButton btnCopyTo;
         private System.Windows.Forms.ToolStripDropDownButton btnAdd;
         private System.Windows.Forms.ToolStripMenuItem invokeURLToolStripMenuItem;
         private System.Windows.Forms.ToolStripMenuItem invokeScriptToolStripMenuItem;
         private System.Windows.Forms.ToolStripMenuItem searchToolStripMenuItem;
+        private System.Windows.Forms.ToolStripButton btnDelete;
+        private System.Windows.Forms.ToolStripButton btnExport;
+        private System.Windows.Forms.ToolStripButton btnImport;
+
     }
 }

Modified: sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutCommandsCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutCommandsCtrl.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutCommandsCtrl.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -26,6 +26,8 @@
 using System.Windows.Forms;
 using Maestro.Shared.UI;
 using Maestro.Editors.Common;
+using OSGeo.MapGuide.ObjectModels.WebLayout;
+using OSGeo.MapGuide.MaestroAPI.ObjectModels;
 
 namespace Maestro.Editors.WebLayout
 {
@@ -37,9 +39,214 @@
             InitializeComponent();
         }
 
+        private WebLayoutType _wl;
+        private IEditorService _edsvc;
+
         public override void Bind(IEditorService service)
         {
+            _edsvc = service;
+            _edsvc.RegisterCustomNotifier(this);
 
+            _wl = (WebLayoutType)_edsvc.GetEditedResource();
+            _wl.CommandSet.ListChanged += OnCommandSetListChanged;
+            grdCommands.DataSource = _wl.CommandSet;
         }
+
+        protected override void UnsubscribeEventHandlers()
+        {
+            if (_wl != null && _wl.CommandSet != null)
+                _wl.CommandSet.ListChanged -= OnCommandSetListChanged;
+
+            base.UnsubscribeEventHandlers();
+        }
+
+        void OnCommandSetListChanged(object sender, ListChangedEventArgs e)
+        {
+            OnResourceChanged();
+        }
+
+        private OSGeo.MapGuide.ObjectModels.WebLayout.CommandType[] GetCustomCommands()
+        {
+            var cmds = new List<OSGeo.MapGuide.ObjectModels.WebLayout.CommandType>();
+            foreach (var c in _wl.CommandSet)
+            {
+                var type = c.GetType();
+                if (typeof(InvokeURLCommandType).IsAssignableFrom(type))
+                {
+                    cmds.Add(c);
+                }
+                else if (typeof(InvokeScriptCommandType).IsAssignableFrom(type))
+                {
+                    cmds.Add(c);
+                }
+                else if (typeof(SearchCommandType).IsAssignableFrom(type))
+                {
+                    cmds.Add(c);
+                }
+            }
+            return cmds.ToArray();
+        }
+
+        private OSGeo.MapGuide.ObjectModels.WebLayout.CommandType[] GetSelectedCustomCommands()
+        {
+            var cmds = new List<OSGeo.MapGuide.ObjectModels.WebLayout.CommandType>();
+            foreach (DataGridViewRow row in grdCommands.SelectedRows)
+            {
+                if (typeof(InvokeScriptCommandType).IsAssignableFrom(row.DataBoundItem.GetType()))
+                {
+                    cmds.Add((OSGeo.MapGuide.ObjectModels.WebLayout.CommandType)row.DataBoundItem);
+                }
+                else if (typeof(InvokeURLCommandType).IsAssignableFrom(row.DataBoundItem.GetType()))
+                {
+                    cmds.Add((OSGeo.MapGuide.ObjectModels.WebLayout.CommandType)row.DataBoundItem);
+                }
+                else if (typeof(SearchCommandType).IsAssignableFrom(row.DataBoundItem.GetType()))
+                {
+                    cmds.Add((OSGeo.MapGuide.ObjectModels.WebLayout.CommandType)row.DataBoundItem);
+                }
+            }
+            return cmds.ToArray();
+        }
+
+        private void EvaluateCommands()
+        {
+            var customCmds = GetCustomCommands();
+            var selectedCmds = GetSelectedCustomCommands();
+            btnDelete.Enabled = selectedCmds.Length == 1;
+            btnExport.Enabled = customCmds.Length > 0;
+        }
+
+        private void invokeURLToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var cmd = ObjectFactory.CreateInvokeUrlCommand();
+            cmd.Description = cmd.Label = cmd.Tooltip = Properties.Resources.InvokeUrlCmdDescription;
+            _wl.CommandSet.Add(cmd);
+        }
+
+        private void invokeScriptToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var cmd = ObjectFactory.CreateInvokeScriptCommand();
+            cmd.Description = cmd.Label = cmd.Tooltip = Properties.Resources.InvokeScriptCmdDescription;
+            _wl.CommandSet.Add(cmd);
+        }
+
+        private void searchToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var cmd = ObjectFactory.CreateSearchCommand();
+            cmd.Description = cmd.Label = cmd.Tooltip = Properties.Resources.SearchCmdDescription;
+            _wl.CommandSet.Add(cmd);
+        }
+
+        private void grdCommands_CellContentClick(object sender, DataGridViewCellEventArgs e)
+        {
+            if (e.RowIndex >= 0)
+            {
+                var row = grdCommands.Rows[e.RowIndex];
+                row.Selected = true;
+
+                ClearCommandUI();
+
+                var cmdCtrl = new CustomCommandPropertyCtrl();
+                cmdCtrl.Dock = DockStyle.Fill;
+                cmdCtrl.Bind((OSGeo.MapGuide.ObjectModels.WebLayout.CommandType)row.DataBoundItem, _edsvc);
+
+                grpCommand.Controls.Add(cmdCtrl);
+
+                EvaluateCommands();
+            }
+        }
+
+        private void ClearCommandUI()
+        {
+            foreach (Control ctrl in grpCommand.Controls)
+            {
+                ctrl.Dispose();
+            }
+            grpCommand.Controls.Clear();
+        }
+
+        private static bool Ask(string title, string message)
+        {
+            return MessageBox.Show(message, title, MessageBoxButtons.YesNo) == DialogResult.Yes;
+        }
+
+        private void btnDelete_Click(object sender, EventArgs e)
+        {
+            if (grdCommands.SelectedRows.Count == 1)
+            {
+                var iurl = grdCommands.SelectedRows[0].DataBoundItem as InvokeURLCommandType;
+                var iscr = grdCommands.SelectedRows[0].DataBoundItem as InvokeScriptCommandType;
+                var srch = grdCommands.SelectedRows[0].DataBoundItem as SearchCommandType;
+
+                WebLayoutRegion[] regions;
+                if (iurl != null)
+                {
+                    if (_wl.IsCommandReferenced(iurl.Name, out regions))
+                    {
+                        if (!Ask(Properties.Resources.DeleteCommand, string.Format(Properties.Resources.PromptDeleteCommand, GetAsString(regions, ", "))))
+                            return;
+                    }
+
+                    using (new WaitCursor(this))
+                    {
+                        _wl.CommandSet.Remove(iurl);
+                        int deleted = _wl.RemoveAllReferences(iurl.Name);
+                        ClearCommandUI();
+                    }
+                }
+                else if (iscr != null)
+                {
+                    if (_wl.IsCommandReferenced(iscr.Name, out regions))
+                    {
+                        if (!Ask(Properties.Resources.DeleteCommand, string.Format(Properties.Resources.PromptDeleteCommand, GetAsString(regions, ", "))))
+                            return;
+                    }
+
+                    using (new WaitCursor(this))
+                    {
+                        _wl.CommandSet.Remove(iscr);
+                        _wl.RemoveAllReferences(iscr.Name);
+                        ClearCommandUI();
+                    }
+                }
+                else if (srch != null)
+                {
+                    if (_wl.IsCommandReferenced(srch.Name, out regions))
+                    {
+                        if (!Ask(Properties.Resources.DeleteCommand, string.Format(Properties.Resources.PromptDeleteCommand, GetAsString(regions, ", "))))
+                            return;
+                    }
+
+                    using (new WaitCursor(this))
+                    {
+                        _wl.CommandSet.Remove(srch);
+                        _wl.RemoveAllReferences(srch.Name);
+                        ClearCommandUI();
+                    }
+                }
+            }
+        }
+
+        private static string GetAsString(WebLayoutRegion[] regions, string separator)
+        {
+            StringBuilder sb = new StringBuilder();
+            for (int i = 0; i < regions.Length; i++)
+            {
+                sb.Append(regions[i].ToString());
+                if (i < regions.Length - 1)
+                    sb.Append(separator);
+            }
+            return sb.ToString();
+        }
+
+        private void btnExport_Click(object sender, EventArgs e)
+        {
+
+        }
+
+        private void btnImport_Click(object sender, EventArgs e)
+        {
+
+        }
     }
 }

Modified: sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutEditorCtrl.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutEditorCtrl.Designer.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutEditorCtrl.Designer.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -28,65 +28,66 @@
         /// </summary>
         private void InitializeComponent()
         {
-            this.webLayoutSettingsCtrl1 = new Maestro.Editors.WebLayout.WebLayoutSettingsCtrl();
-            this.webLayoutMenusCtrl1 = new Maestro.Editors.WebLayout.WebLayoutMenusCtrl();
-            this.webLayoutCommandsCtrl1 = new Maestro.Editors.WebLayout.WebLayoutCommandsCtrl();
+            this.webLayoutSettingsCtrl = new Maestro.Editors.WebLayout.WebLayoutSettingsCtrl();
+            this.webLayoutMenusCtrl = new Maestro.Editors.WebLayout.WebLayoutMenusCtrl();
+            this.webLayoutCommandsCtrl = new Maestro.Editors.WebLayout.WebLayoutCommandsCtrl();
             this.SuspendLayout();
             // 
-            // webLayoutSettingsCtrl1
+            // webLayoutSettingsCtrl
             // 
-            this.webLayoutSettingsCtrl1.ContentBackgroundColor = System.Drawing.SystemColors.Control;
-            this.webLayoutSettingsCtrl1.Dock = System.Windows.Forms.DockStyle.Top;
-            this.webLayoutSettingsCtrl1.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
-            this.webLayoutSettingsCtrl1.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.webLayoutSettingsCtrl1.HeaderText = "General Settings";
-            this.webLayoutSettingsCtrl1.Location = new System.Drawing.Point(0, 0);
-            this.webLayoutSettingsCtrl1.Name = "webLayoutSettingsCtrl1";
-            this.webLayoutSettingsCtrl1.Size = new System.Drawing.Size(591, 425);
-            this.webLayoutSettingsCtrl1.TabIndex = 0;
+            this.webLayoutSettingsCtrl.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.webLayoutSettingsCtrl.Dock = System.Windows.Forms.DockStyle.Top;
+            this.webLayoutSettingsCtrl.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.webLayoutSettingsCtrl.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.webLayoutSettingsCtrl.HeaderText = "General Settings";
+            this.webLayoutSettingsCtrl.Location = new System.Drawing.Point(0, 0);
+            this.webLayoutSettingsCtrl.Name = "webLayoutSettingsCtrl";
+            this.webLayoutSettingsCtrl.Size = new System.Drawing.Size(574, 425);
+            this.webLayoutSettingsCtrl.TabIndex = 0;
             // 
-            // webLayoutMenusCtrl1
+            // webLayoutMenusCtrl
             // 
-            this.webLayoutMenusCtrl1.ContentBackgroundColor = System.Drawing.SystemColors.Control;
-            this.webLayoutMenusCtrl1.Dock = System.Windows.Forms.DockStyle.Top;
-            this.webLayoutMenusCtrl1.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
-            this.webLayoutMenusCtrl1.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.webLayoutMenusCtrl1.HeaderText = "Menus and Toolbars";
-            this.webLayoutMenusCtrl1.Location = new System.Drawing.Point(0, 425);
-            this.webLayoutMenusCtrl1.Name = "webLayoutMenusCtrl1";
-            this.webLayoutMenusCtrl1.Size = new System.Drawing.Size(591, 319);
-            this.webLayoutMenusCtrl1.TabIndex = 1;
+            this.webLayoutMenusCtrl.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.webLayoutMenusCtrl.Dock = System.Windows.Forms.DockStyle.Top;
+            this.webLayoutMenusCtrl.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.webLayoutMenusCtrl.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.webLayoutMenusCtrl.HeaderText = "Menus and Toolbars";
+            this.webLayoutMenusCtrl.Location = new System.Drawing.Point(0, 425);
+            this.webLayoutMenusCtrl.Name = "webLayoutMenusCtrl";
+            this.webLayoutMenusCtrl.Size = new System.Drawing.Size(574, 319);
+            this.webLayoutMenusCtrl.TabIndex = 1;
             // 
-            // webLayoutCommandsCtrl1
+            // webLayoutCommandsCtrl
             // 
-            this.webLayoutCommandsCtrl1.ContentBackgroundColor = System.Drawing.SystemColors.Control;
-            this.webLayoutCommandsCtrl1.Dock = System.Windows.Forms.DockStyle.Top;
-            this.webLayoutCommandsCtrl1.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
-            this.webLayoutCommandsCtrl1.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.webLayoutCommandsCtrl1.HeaderText = "Commands";
-            this.webLayoutCommandsCtrl1.Location = new System.Drawing.Point(0, 744);
-            this.webLayoutCommandsCtrl1.Name = "webLayoutCommandsCtrl1";
-            this.webLayoutCommandsCtrl1.Size = new System.Drawing.Size(591, 319);
-            this.webLayoutCommandsCtrl1.TabIndex = 2;
+            this.webLayoutCommandsCtrl.ContentBackgroundColor = System.Drawing.SystemColors.Control;
+            this.webLayoutCommandsCtrl.Dock = System.Windows.Forms.DockStyle.Top;
+            this.webLayoutCommandsCtrl.HeaderBackgroundColor = System.Drawing.Color.LightSteelBlue;
+            this.webLayoutCommandsCtrl.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.webLayoutCommandsCtrl.HeaderText = "Commands";
+            this.webLayoutCommandsCtrl.Location = new System.Drawing.Point(0, 744);
+            this.webLayoutCommandsCtrl.Name = "webLayoutCommandsCtrl";
+            this.webLayoutCommandsCtrl.Size = new System.Drawing.Size(574, 319);
+            this.webLayoutCommandsCtrl.TabIndex = 2;
             // 
             // WebLayoutEditorCtrl
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.AutoScroll = true;
-            this.Controls.Add(this.webLayoutCommandsCtrl1);
-            this.Controls.Add(this.webLayoutMenusCtrl1);
-            this.Controls.Add(this.webLayoutSettingsCtrl1);
+            this.Controls.Add(this.webLayoutCommandsCtrl);
+            this.Controls.Add(this.webLayoutMenusCtrl);
+            this.Controls.Add(this.webLayoutSettingsCtrl);
             this.Name = "WebLayoutEditorCtrl";
-            this.Size = new System.Drawing.Size(591, 507);
+            this.Size = new System.Drawing.Size(574, 496);
             this.ResumeLayout(false);
 
         }
 
         #endregion
 
-        private WebLayoutSettingsCtrl webLayoutSettingsCtrl1;
-        private WebLayoutMenusCtrl webLayoutMenusCtrl1;
-        private WebLayoutCommandsCtrl webLayoutCommandsCtrl1;
+        private WebLayoutSettingsCtrl webLayoutSettingsCtrl;
+        private WebLayoutMenusCtrl webLayoutMenusCtrl;
+        private WebLayoutCommandsCtrl webLayoutCommandsCtrl;
+
     }
 }

Modified: sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutEditorCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutEditorCtrl.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutEditorCtrl.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -37,7 +37,9 @@
 
         public override void Bind(IEditorService service)
         {
-            
+            webLayoutSettingsCtrl.Bind(service);
+            webLayoutMenusCtrl.Bind(service);
+            webLayoutCommandsCtrl.Bind(service);
         }
     }
 }

Modified: sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutMenusCtrl.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutMenusCtrl.Designer.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutMenusCtrl.Designer.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -28,82 +28,107 @@
         /// </summary>
         private void InitializeComponent()
         {
+            this.nodeIcon3 = new Aga.Controls.Tree.NodeControls.NodeIcon();
+            this.nodeTextBox3 = new Aga.Controls.Tree.NodeControls.NodeTextBox();
+            this.nodeIcon1 = new Aga.Controls.Tree.NodeControls.NodeIcon();
+            this.nodeTextBox1 = new Aga.Controls.Tree.NodeControls.NodeTextBox();
+            this.nodeIcon2 = new Aga.Controls.Tree.NodeControls.NodeIcon();
+            this.nodeTextBox2 = new Aga.Controls.Tree.NodeControls.NodeTextBox();
+            this.grdCommands = new System.Windows.Forms.DataGridView();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.TAB_CONTEXT_MENU = new System.Windows.Forms.TabPage();
+            this.nodeIcon4 = new Aga.Controls.Tree.NodeControls.NodeIcon();
+            this.nodeTextBox4 = new Aga.Controls.Tree.NodeControls.NodeTextBox();
+            this.TAB_TOOLBAR = new System.Windows.Forms.TabPage();
             this.tabMenus = new System.Windows.Forms.TabControl();
-            this.TAB_TOOLBAR = new System.Windows.Forms.TabPage();
-            this.trvToolbar = new Aga.Controls.Tree.TreeViewAdv();
-            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
-            this.TAB_CONTEXT_MENU = new System.Windows.Forms.TabPage();
-            this.trvContextMenu = new Aga.Controls.Tree.TreeViewAdv();
-            this.toolStrip2 = new System.Windows.Forms.ToolStrip();
-            this.TAB_TASK_FRAME = new System.Windows.Forms.TabPage();
-            this.trvTaskMenu = new Aga.Controls.Tree.TreeViewAdv();
-            this.toolStrip3 = new System.Windows.Forms.ToolStrip();
-            this.grdCommands = new System.Windows.Forms.DataGridView();
+            this.TAB_TASK_MENU = new System.Windows.Forms.TabPage();
+            this.edToolbar = new Maestro.Editors.WebLayout.MenuEditorCtrl();
+            this.edContextMenu = new Maestro.Editors.WebLayout.MenuEditorCtrl();
+            this.edTaskMenu = new Maestro.Editors.WebLayout.MenuEditorCtrl();
             this.contentPanel.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.grdCommands)).BeginInit();
+            this.groupBox1.SuspendLayout();
+            this.TAB_CONTEXT_MENU.SuspendLayout();
+            this.TAB_TOOLBAR.SuspendLayout();
             this.tabMenus.SuspendLayout();
-            this.TAB_TOOLBAR.SuspendLayout();
-            this.TAB_CONTEXT_MENU.SuspendLayout();
-            this.TAB_TASK_FRAME.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.grdCommands)).BeginInit();
+            this.TAB_TASK_MENU.SuspendLayout();
             this.SuspendLayout();
             // 
             // contentPanel
             // 
-            this.contentPanel.Controls.Add(this.grdCommands);
+            this.contentPanel.Controls.Add(this.groupBox1);
             this.contentPanel.Controls.Add(this.tabMenus);
             this.contentPanel.Size = new System.Drawing.Size(682, 292);
             // 
-            // tabMenus
+            // nodeIcon3
             // 
-            this.tabMenus.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                        | System.Windows.Forms.AnchorStyles.Left)));
-            this.tabMenus.Controls.Add(this.TAB_TOOLBAR);
-            this.tabMenus.Controls.Add(this.TAB_CONTEXT_MENU);
-            this.tabMenus.Controls.Add(this.TAB_TASK_FRAME);
-            this.tabMenus.Location = new System.Drawing.Point(15, 19);
-            this.tabMenus.Name = "tabMenus";
-            this.tabMenus.SelectedIndex = 0;
-            this.tabMenus.Size = new System.Drawing.Size(228, 252);
-            this.tabMenus.TabIndex = 0;
+            this.nodeIcon3.DataPropertyName = "Icon";
+            this.nodeIcon3.LeftMargin = 1;
+            this.nodeIcon3.ParentColumn = null;
+            this.nodeIcon3.ScaleMode = Aga.Controls.Tree.ImageScaleMode.Clip;
             // 
-            // TAB_TOOLBAR
+            // nodeTextBox3
             // 
-            this.TAB_TOOLBAR.Controls.Add(this.trvToolbar);
-            this.TAB_TOOLBAR.Controls.Add(this.toolStrip1);
-            this.TAB_TOOLBAR.Location = new System.Drawing.Point(4, 22);
-            this.TAB_TOOLBAR.Name = "TAB_TOOLBAR";
-            this.TAB_TOOLBAR.Size = new System.Drawing.Size(220, 226);
-            this.TAB_TOOLBAR.TabIndex = 0;
-            this.TAB_TOOLBAR.Text = "Toolbar";
-            this.TAB_TOOLBAR.UseVisualStyleBackColor = true;
+            this.nodeTextBox3.DataPropertyName = "Label";
+            this.nodeTextBox3.IncrementalSearchEnabled = true;
+            this.nodeTextBox3.LeftMargin = 3;
+            this.nodeTextBox3.ParentColumn = null;
             // 
-            // trvToolbar
+            // nodeIcon1
             // 
-            this.trvToolbar.BackColor = System.Drawing.SystemColors.Window;
-            this.trvToolbar.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
-            this.trvToolbar.DefaultToolTipProvider = null;
-            this.trvToolbar.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.trvToolbar.DragDropMarkColor = System.Drawing.Color.Black;
-            this.trvToolbar.LineColor = System.Drawing.SystemColors.ControlDark;
-            this.trvToolbar.Location = new System.Drawing.Point(0, 25);
-            this.trvToolbar.Model = null;
-            this.trvToolbar.Name = "trvToolbar";
-            this.trvToolbar.SelectedNode = null;
-            this.trvToolbar.Size = new System.Drawing.Size(220, 201);
-            this.trvToolbar.TabIndex = 1;
+            this.nodeIcon1.DataPropertyName = "Icon";
+            this.nodeIcon1.LeftMargin = 1;
+            this.nodeIcon1.ParentColumn = null;
+            this.nodeIcon1.ScaleMode = Aga.Controls.Tree.ImageScaleMode.Clip;
             // 
-            // toolStrip1
+            // nodeTextBox1
             // 
-            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
-            this.toolStrip1.Name = "toolStrip1";
-            this.toolStrip1.Size = new System.Drawing.Size(220, 25);
-            this.toolStrip1.TabIndex = 0;
-            this.toolStrip1.Text = "toolStrip1";
+            this.nodeTextBox1.DataPropertyName = "Label";
+            this.nodeTextBox1.IncrementalSearchEnabled = true;
+            this.nodeTextBox1.LeftMargin = 3;
+            this.nodeTextBox1.ParentColumn = null;
             // 
+            // nodeIcon2
+            // 
+            this.nodeIcon2.DataPropertyName = "Icon";
+            this.nodeIcon2.LeftMargin = 1;
+            this.nodeIcon2.ParentColumn = null;
+            this.nodeIcon2.ScaleMode = Aga.Controls.Tree.ImageScaleMode.Clip;
+            // 
+            // nodeTextBox2
+            // 
+            this.nodeTextBox2.DataPropertyName = "Label";
+            this.nodeTextBox2.IncrementalSearchEnabled = true;
+            this.nodeTextBox2.LeftMargin = 3;
+            this.nodeTextBox2.ParentColumn = null;
+            // 
+            // grdCommands
+            // 
+            this.grdCommands.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.grdCommands.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.grdCommands.Location = new System.Drawing.Point(14, 19);
+            this.grdCommands.Name = "grdCommands";
+            this.grdCommands.Size = new System.Drawing.Size(393, 227);
+            this.grdCommands.TabIndex = 1;
+            // 
+            // groupBox1
+            // 
+            this.groupBox1.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.groupBox1.Controls.Add(this.grdCommands);
+            this.groupBox1.Location = new System.Drawing.Point(250, 19);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(420, 252);
+            this.groupBox1.TabIndex = 2;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Available Commands";
+            // 
             // TAB_CONTEXT_MENU
             // 
-            this.TAB_CONTEXT_MENU.Controls.Add(this.trvContextMenu);
-            this.TAB_CONTEXT_MENU.Controls.Add(this.toolStrip2);
+            this.TAB_CONTEXT_MENU.Controls.Add(this.edContextMenu);
             this.TAB_CONTEXT_MENU.Location = new System.Drawing.Point(4, 22);
             this.TAB_CONTEXT_MENU.Name = "TAB_CONTEXT_MENU";
             this.TAB_CONTEXT_MENU.Size = new System.Drawing.Size(220, 226);
@@ -111,74 +136,81 @@
             this.TAB_CONTEXT_MENU.Text = "Context Menu";
             this.TAB_CONTEXT_MENU.UseVisualStyleBackColor = true;
             // 
-            // trvContextMenu
+            // nodeIcon4
             // 
-            this.trvContextMenu.BackColor = System.Drawing.SystemColors.Window;
-            this.trvContextMenu.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
-            this.trvContextMenu.DefaultToolTipProvider = null;
-            this.trvContextMenu.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.trvContextMenu.DragDropMarkColor = System.Drawing.Color.Black;
-            this.trvContextMenu.LineColor = System.Drawing.SystemColors.ControlDark;
-            this.trvContextMenu.Location = new System.Drawing.Point(0, 25);
-            this.trvContextMenu.Model = null;
-            this.trvContextMenu.Name = "trvContextMenu";
-            this.trvContextMenu.SelectedNode = null;
-            this.trvContextMenu.Size = new System.Drawing.Size(220, 201);
-            this.trvContextMenu.TabIndex = 1;
+            this.nodeIcon4.DataPropertyName = "Icon";
+            this.nodeIcon4.LeftMargin = 1;
+            this.nodeIcon4.ParentColumn = null;
+            this.nodeIcon4.ScaleMode = Aga.Controls.Tree.ImageScaleMode.Clip;
             // 
-            // toolStrip2
+            // nodeTextBox4
             // 
-            this.toolStrip2.Location = new System.Drawing.Point(0, 0);
-            this.toolStrip2.Name = "toolStrip2";
-            this.toolStrip2.Size = new System.Drawing.Size(220, 25);
-            this.toolStrip2.TabIndex = 0;
-            this.toolStrip2.Text = "toolStrip2";
+            this.nodeTextBox4.DataPropertyName = "Label";
+            this.nodeTextBox4.IncrementalSearchEnabled = true;
+            this.nodeTextBox4.LeftMargin = 3;
+            this.nodeTextBox4.ParentColumn = null;
             // 
-            // TAB_TASK_FRAME
+            // TAB_TOOLBAR
             // 
-            this.TAB_TASK_FRAME.Controls.Add(this.trvTaskMenu);
-            this.TAB_TASK_FRAME.Controls.Add(this.toolStrip3);
-            this.TAB_TASK_FRAME.Location = new System.Drawing.Point(4, 22);
-            this.TAB_TASK_FRAME.Name = "TAB_TASK_FRAME";
-            this.TAB_TASK_FRAME.Size = new System.Drawing.Size(220, 226);
-            this.TAB_TASK_FRAME.TabIndex = 2;
-            this.TAB_TASK_FRAME.Text = "Task Menu";
-            this.TAB_TASK_FRAME.UseVisualStyleBackColor = true;
+            this.TAB_TOOLBAR.Controls.Add(this.edToolbar);
+            this.TAB_TOOLBAR.Location = new System.Drawing.Point(4, 22);
+            this.TAB_TOOLBAR.Name = "TAB_TOOLBAR";
+            this.TAB_TOOLBAR.Size = new System.Drawing.Size(220, 226);
+            this.TAB_TOOLBAR.TabIndex = 0;
+            this.TAB_TOOLBAR.Text = "Toolbar";
+            this.TAB_TOOLBAR.UseVisualStyleBackColor = true;
             // 
-            // trvTaskMenu
+            // tabMenus
             // 
-            this.trvTaskMenu.BackColor = System.Drawing.SystemColors.Window;
-            this.trvTaskMenu.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
-            this.trvTaskMenu.DefaultToolTipProvider = null;
-            this.trvTaskMenu.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.trvTaskMenu.DragDropMarkColor = System.Drawing.Color.Black;
-            this.trvTaskMenu.LineColor = System.Drawing.SystemColors.ControlDark;
-            this.trvTaskMenu.Location = new System.Drawing.Point(0, 25);
-            this.trvTaskMenu.Model = null;
-            this.trvTaskMenu.Name = "trvTaskMenu";
-            this.trvTaskMenu.SelectedNode = null;
-            this.trvTaskMenu.Size = new System.Drawing.Size(220, 201);
-            this.trvTaskMenu.TabIndex = 1;
+            this.tabMenus.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)));
+            this.tabMenus.Controls.Add(this.TAB_TOOLBAR);
+            this.tabMenus.Controls.Add(this.TAB_CONTEXT_MENU);
+            this.tabMenus.Controls.Add(this.TAB_TASK_MENU);
+            this.tabMenus.Location = new System.Drawing.Point(16, 19);
+            this.tabMenus.Name = "tabMenus";
+            this.tabMenus.SelectedIndex = 0;
+            this.tabMenus.Size = new System.Drawing.Size(228, 252);
+            this.tabMenus.TabIndex = 0;
             // 
-            // toolStrip3
+            // TAB_TASK_MENU
             // 
-            this.toolStrip3.Location = new System.Drawing.Point(0, 0);
-            this.toolStrip3.Name = "toolStrip3";
-            this.toolStrip3.Size = new System.Drawing.Size(220, 25);
-            this.toolStrip3.TabIndex = 0;
-            this.toolStrip3.Text = "toolStrip3";
+            this.TAB_TASK_MENU.Controls.Add(this.edTaskMenu);
+            this.TAB_TASK_MENU.Location = new System.Drawing.Point(4, 22);
+            this.TAB_TASK_MENU.Name = "TAB_TASK_MENU";
+            this.TAB_TASK_MENU.Padding = new System.Windows.Forms.Padding(3);
+            this.TAB_TASK_MENU.Size = new System.Drawing.Size(220, 226);
+            this.TAB_TASK_MENU.TabIndex = 3;
+            this.TAB_TASK_MENU.Text = "Task Menu";
+            this.TAB_TASK_MENU.UseVisualStyleBackColor = true;
             // 
-            // grdCommands
+            // edToolbar
             // 
-            this.grdCommands.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.grdCommands.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-            this.grdCommands.Location = new System.Drawing.Point(264, 19);
-            this.grdCommands.Name = "grdCommands";
-            this.grdCommands.Size = new System.Drawing.Size(393, 252);
-            this.grdCommands.TabIndex = 1;
+            this.edToolbar.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.edToolbar.Location = new System.Drawing.Point(0, 0);
+            this.edToolbar.Model = null;
+            this.edToolbar.Name = "edToolbar";
+            this.edToolbar.Size = new System.Drawing.Size(220, 226);
+            this.edToolbar.TabIndex = 0;
             // 
+            // edContextMenu
+            // 
+            this.edContextMenu.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.edContextMenu.Location = new System.Drawing.Point(0, 0);
+            this.edContextMenu.Model = null;
+            this.edContextMenu.Name = "edContextMenu";
+            this.edContextMenu.Size = new System.Drawing.Size(220, 226);
+            this.edContextMenu.TabIndex = 0;
+            // 
+            // edTaskMenu
+            // 
+            this.edTaskMenu.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.edTaskMenu.Location = new System.Drawing.Point(3, 3);
+            this.edTaskMenu.Model = null;
+            this.edTaskMenu.Name = "edTaskMenu";
+            this.edTaskMenu.Size = new System.Drawing.Size(214, 220);
+            this.edTaskMenu.TabIndex = 0;
+            // 
             // WebLayoutMenusCtrl
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -187,30 +219,34 @@
             this.Name = "WebLayoutMenusCtrl";
             this.Size = new System.Drawing.Size(682, 319);
             this.contentPanel.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.grdCommands)).EndInit();
+            this.groupBox1.ResumeLayout(false);
+            this.TAB_CONTEXT_MENU.ResumeLayout(false);
+            this.TAB_TOOLBAR.ResumeLayout(false);
             this.tabMenus.ResumeLayout(false);
-            this.TAB_TOOLBAR.ResumeLayout(false);
-            this.TAB_TOOLBAR.PerformLayout();
-            this.TAB_CONTEXT_MENU.ResumeLayout(false);
-            this.TAB_CONTEXT_MENU.PerformLayout();
-            this.TAB_TASK_FRAME.ResumeLayout(false);
-            this.TAB_TASK_FRAME.PerformLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.grdCommands)).EndInit();
+            this.TAB_TASK_MENU.ResumeLayout(false);
             this.ResumeLayout(false);
 
         }
 
         #endregion
 
+        private System.Windows.Forms.DataGridView grdCommands;
+        private System.Windows.Forms.GroupBox groupBox1;
+        private Aga.Controls.Tree.NodeControls.NodeTextBox nodeTextBox1;
+        private Aga.Controls.Tree.NodeControls.NodeIcon nodeIcon1;
+        private Aga.Controls.Tree.NodeControls.NodeIcon nodeIcon3;
+        private Aga.Controls.Tree.NodeControls.NodeTextBox nodeTextBox3;
+        private Aga.Controls.Tree.NodeControls.NodeIcon nodeIcon2;
+        private Aga.Controls.Tree.NodeControls.NodeTextBox nodeTextBox2;
         private System.Windows.Forms.TabControl tabMenus;
         private System.Windows.Forms.TabPage TAB_TOOLBAR;
-        private Aga.Controls.Tree.TreeViewAdv trvToolbar;
-        private System.Windows.Forms.ToolStrip toolStrip1;
         private System.Windows.Forms.TabPage TAB_CONTEXT_MENU;
-        private Aga.Controls.Tree.TreeViewAdv trvContextMenu;
-        private System.Windows.Forms.ToolStrip toolStrip2;
-        private System.Windows.Forms.TabPage TAB_TASK_FRAME;
-        private Aga.Controls.Tree.TreeViewAdv trvTaskMenu;
-        private System.Windows.Forms.ToolStrip toolStrip3;
-        private System.Windows.Forms.DataGridView grdCommands;
+        private System.Windows.Forms.TabPage TAB_TASK_MENU;
+        private Aga.Controls.Tree.NodeControls.NodeIcon nodeIcon4;
+        private Aga.Controls.Tree.NodeControls.NodeTextBox nodeTextBox4;
+        private MenuEditorCtrl edToolbar;
+        private MenuEditorCtrl edContextMenu;
+        private MenuEditorCtrl edTaskMenu;
     }
 }

Modified: sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutMenusCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutMenusCtrl.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutMenusCtrl.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -26,20 +26,38 @@
 using System.Windows.Forms;
 using Maestro.Shared.UI;
 using Maestro.Editors.Common;
+using OSGeo.MapGuide.ObjectModels.WebLayout;
+using Aga.Controls.Tree;
+using System.Diagnostics;
 
 namespace Maestro.Editors.WebLayout
 {
     [ToolboxItem(true)]
     public partial class WebLayoutMenusCtrl : EditorBindableCollapsiblePanel
     {
+        
+
         public WebLayoutMenusCtrl()
         {
             InitializeComponent();
         }
 
+        private WebLayoutType _wl;
+
         public override void Bind(IEditorService service)
         {
+            _wl = (WebLayoutType)service.GetEditedResource();
 
+            edContextMenu.Bind(service, _wl);
+            edTaskMenu.Bind(service, _wl);
+            edToolbar.Bind(service, _wl);
+
+            edContextMenu.Model = new MenuTreeModel(_wl.ContextMenu.MenuItem, _wl);
+            edTaskMenu.Model = new MenuTreeModel(_wl.TaskPane.TaskBar.MenuButton, _wl);
+            edToolbar.Model = new MenuTreeModel(_wl.ToolBar.Button, _wl);
+
+            grdCommands.DataSource = _wl.CommandSet;
         }
+
     }
 }

Modified: sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutMenusCtrl.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutMenusCtrl.resx	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutMenusCtrl.resx	2010-07-29 13:13:00 UTC (rev 5059)
@@ -117,22 +117,4 @@
   <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>
-  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <metadata name="toolStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>122, 17</value>
-  </metadata>
-  <metadata name="toolStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>122, 17</value>
-  </metadata>
-  <metadata name="toolStrip3.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>227, 17</value>
-  </metadata>
-  <metadata name="toolStrip3.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>227, 17</value>
-  </metadata>
 </root>
\ No newline at end of file

Modified: sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutSettingsCtrl.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutSettingsCtrl.Designer.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutSettingsCtrl.Designer.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -34,30 +34,30 @@
             this.txtMapDefinition = new System.Windows.Forms.TextBox();
             this.btnBrowse = new System.Windows.Forms.Button();
             this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.chkCustomView = new System.Windows.Forms.CheckBox();
+            this.numX = new System.Windows.Forms.TextBox();
+            this.numY = new System.Windows.Forms.TextBox();
+            this.numScale = new System.Windows.Forms.TextBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
             this.label3 = new System.Windows.Forms.Label();
-            this.label4 = new System.Windows.Forms.Label();
-            this.label5 = new System.Windows.Forms.Label();
-            this.label6 = new System.Windows.Forms.Label();
-            this.numScale = new System.Windows.Forms.TextBox();
-            this.numY = new System.Windows.Forms.TextBox();
-            this.numX = new System.Windows.Forms.TextBox();
-            this.checkBox1 = new System.Windows.Forms.CheckBox();
             this.groupBox2 = new System.Windows.Forms.GroupBox();
-            this.groupBox3 = new System.Windows.Forms.GroupBox();
-            this.groupBox4 = new System.Windows.Forms.GroupBox();
             this.groupBox5 = new System.Windows.Forms.GroupBox();
-            this.chkLegend = new System.Windows.Forms.CheckBox();
-            this.chkProperties = new System.Windows.Forms.CheckBox();
-            this.numInfoPaneWidth = new System.Windows.Forms.TextBox();
-            this.label7 = new System.Windows.Forms.Label();
-            this.chkToolbar = new System.Windows.Forms.CheckBox();
-            this.chkContextMenu = new System.Windows.Forms.CheckBox();
-            this.chkStatusBar = new System.Windows.Forms.CheckBox();
-            this.chkZoomControl = new System.Windows.Forms.CheckBox();
-            this.chkTaskPane = new System.Windows.Forms.CheckBox();
-            this.chkTaskBar = new System.Windows.Forms.CheckBox();
             this.label8 = new System.Windows.Forms.Label();
             this.numTaskPaneWidth = new System.Windows.Forms.TextBox();
+            this.chkTaskBar = new System.Windows.Forms.CheckBox();
+            this.chkTaskPane = new System.Windows.Forms.CheckBox();
+            this.groupBox4 = new System.Windows.Forms.GroupBox();
+            this.chkZoomControl = new System.Windows.Forms.CheckBox();
+            this.chkStatusBar = new System.Windows.Forms.CheckBox();
+            this.chkContextMenu = new System.Windows.Forms.CheckBox();
+            this.chkToolbar = new System.Windows.Forms.CheckBox();
+            this.groupBox3 = new System.Windows.Forms.GroupBox();
+            this.label7 = new System.Windows.Forms.Label();
+            this.numInfoPaneWidth = new System.Windows.Forms.TextBox();
+            this.chkProperties = new System.Windows.Forms.CheckBox();
+            this.chkLegend = new System.Windows.Forms.CheckBox();
             this.label9 = new System.Windows.Forms.Label();
             this.txtInitialTaskPaneUrl = new System.Windows.Forms.TextBox();
             this.txtHyperlinkFrame = new System.Windows.Forms.TextBox();
@@ -69,9 +69,9 @@
             this.contentPanel.SuspendLayout();
             this.groupBox1.SuspendLayout();
             this.groupBox2.SuspendLayout();
+            this.groupBox5.SuspendLayout();
+            this.groupBox4.SuspendLayout();
             this.groupBox3.SuspendLayout();
-            this.groupBox4.SuspendLayout();
-            this.groupBox5.SuspendLayout();
             this.SuspendLayout();
             // 
             // contentPanel
@@ -144,7 +144,7 @@
             // 
             this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                         | System.Windows.Forms.AnchorStyles.Right)));
-            this.groupBox1.Controls.Add(this.checkBox1);
+            this.groupBox1.Controls.Add(this.chkCustomView);
             this.groupBox1.Controls.Add(this.numX);
             this.groupBox1.Controls.Add(this.numY);
             this.groupBox1.Controls.Add(this.numScale);
@@ -158,33 +158,38 @@
             this.groupBox1.TabIndex = 5;
             this.groupBox1.TabStop = false;
             // 
-            // label3
+            // chkCustomView
             // 
-            this.label3.AutoSize = true;
-            this.label3.Location = new System.Drawing.Point(16, 28);
-            this.label3.Name = "label3";
-            this.label3.Size = new System.Drawing.Size(14, 13);
-            this.label3.TabIndex = 0;
-            this.label3.Text = "X";
+            this.chkCustomView.AutoSize = true;
+            this.chkCustomView.Location = new System.Drawing.Point(6, -1);
+            this.chkCustomView.Name = "chkCustomView";
+            this.chkCustomView.Size = new System.Drawing.Size(229, 17);
+            this.chkCustomView.TabIndex = 7;
+            this.chkCustomView.Text = "Override the Map\'s initial position and scale\r\n";
+            this.chkCustomView.UseVisualStyleBackColor = true;
+            this.chkCustomView.CheckedChanged += new System.EventHandler(this.chkCustomView_CheckedChanged);
             // 
-            // label4
+            // numX
             // 
-            this.label4.AutoSize = true;
-            this.label4.Location = new System.Drawing.Point(132, 28);
-            this.label4.Name = "label4";
-            this.label4.Size = new System.Drawing.Size(14, 13);
-            this.label4.TabIndex = 1;
-            this.label4.Text = "Y";
+            this.numX.Location = new System.Drawing.Point(36, 25);
+            this.numX.Name = "numX";
+            this.numX.Size = new System.Drawing.Size(90, 20);
+            this.numX.TabIndex = 6;
             // 
-            // label5
+            // numY
             // 
-            this.label5.AutoSize = true;
-            this.label5.Location = new System.Drawing.Point(241, 28);
-            this.label5.Name = "label5";
-            this.label5.Size = new System.Drawing.Size(34, 13);
-            this.label5.TabIndex = 2;
-            this.label5.Text = "Scale";
+            this.numY.Location = new System.Drawing.Point(152, 25);
+            this.numY.Name = "numY";
+            this.numY.Size = new System.Drawing.Size(81, 20);
+            this.numY.TabIndex = 5;
             // 
+            // numScale
+            // 
+            this.numScale.Location = new System.Drawing.Point(303, 25);
+            this.numScale.Name = "numScale";
+            this.numScale.Size = new System.Drawing.Size(100, 20);
+            this.numScale.TabIndex = 4;
+            // 
             // label6
             // 
             this.label6.AutoSize = true;
@@ -194,37 +199,33 @@
             this.label6.TabIndex = 3;
             this.label6.Text = "1:";
             // 
-            // numScale
+            // label5
             // 
-            this.numScale.Location = new System.Drawing.Point(303, 25);
-            this.numScale.Name = "numScale";
-            this.numScale.Size = new System.Drawing.Size(100, 20);
-            this.numScale.TabIndex = 4;
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(241, 28);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(34, 13);
+            this.label5.TabIndex = 2;
+            this.label5.Text = "Scale";
             // 
-            // numY
+            // label4
             // 
-            this.numY.Location = new System.Drawing.Point(152, 25);
-            this.numY.Name = "numY";
-            this.numY.Size = new System.Drawing.Size(81, 20);
-            this.numY.TabIndex = 5;
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(132, 28);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(14, 13);
+            this.label4.TabIndex = 1;
+            this.label4.Text = "Y";
             // 
-            // numX
+            // label3
             // 
-            this.numX.Location = new System.Drawing.Point(36, 25);
-            this.numX.Name = "numX";
-            this.numX.Size = new System.Drawing.Size(90, 20);
-            this.numX.TabIndex = 6;
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(16, 28);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(14, 13);
+            this.label3.TabIndex = 0;
+            this.label3.Text = "X";
             // 
-            // checkBox1
-            // 
-            this.checkBox1.AutoSize = true;
-            this.checkBox1.Location = new System.Drawing.Point(6, -1);
-            this.checkBox1.Name = "checkBox1";
-            this.checkBox1.Size = new System.Drawing.Size(229, 17);
-            this.checkBox1.TabIndex = 7;
-            this.checkBox1.Text = "Override the Map\'s initial position and scale\r\n";
-            this.checkBox1.UseVisualStyleBackColor = true;
-            // 
             // groupBox2
             // 
             this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
@@ -239,32 +240,6 @@
             this.groupBox2.TabStop = false;
             this.groupBox2.Text = "Item Visibility";
             // 
-            // groupBox3
-            // 
-            this.groupBox3.Controls.Add(this.label7);
-            this.groupBox3.Controls.Add(this.numInfoPaneWidth);
-            this.groupBox3.Controls.Add(this.chkProperties);
-            this.groupBox3.Controls.Add(this.chkLegend);
-            this.groupBox3.Location = new System.Drawing.Point(19, 20);
-            this.groupBox3.Name = "groupBox3";
-            this.groupBox3.Size = new System.Drawing.Size(161, 142);
-            this.groupBox3.TabIndex = 0;
-            this.groupBox3.TabStop = false;
-            this.groupBox3.Text = "Information Pane";
-            // 
-            // groupBox4
-            // 
-            this.groupBox4.Controls.Add(this.chkZoomControl);
-            this.groupBox4.Controls.Add(this.chkStatusBar);
-            this.groupBox4.Controls.Add(this.chkContextMenu);
-            this.groupBox4.Controls.Add(this.chkToolbar);
-            this.groupBox4.Location = new System.Drawing.Point(186, 20);
-            this.groupBox4.Name = "groupBox4";
-            this.groupBox4.Size = new System.Drawing.Size(154, 142);
-            this.groupBox4.TabIndex = 1;
-            this.groupBox4.TabStop = false;
-            this.groupBox4.Text = "Map Pane";
-            // 
             // groupBox5
             // 
             this.groupBox5.Controls.Add(this.label8);
@@ -278,61 +253,66 @@
             this.groupBox5.TabStop = false;
             this.groupBox5.Text = "Task Pane";
             // 
-            // chkLegend
+            // label8
             // 
-            this.chkLegend.AutoSize = true;
-            this.chkLegend.Location = new System.Drawing.Point(17, 20);
-            this.chkLegend.Name = "chkLegend";
-            this.chkLegend.Size = new System.Drawing.Size(88, 17);
-            this.chkLegend.TabIndex = 0;
-            this.chkLegend.Text = "Layer Control";
-            this.chkLegend.UseVisualStyleBackColor = true;
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(16, 89);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(81, 13);
+            this.label8.TabIndex = 5;
+            this.label8.Text = "Width (in pixels)";
             // 
-            // chkProperties
+            // numTaskPaneWidth
             // 
-            this.chkProperties.AutoSize = true;
-            this.chkProperties.Location = new System.Drawing.Point(17, 43);
-            this.chkProperties.Name = "chkProperties";
-            this.chkProperties.Size = new System.Drawing.Size(101, 17);
-            this.chkProperties.TabIndex = 1;
-            this.chkProperties.Text = "Properties Pane";
-            this.chkProperties.UseVisualStyleBackColor = true;
+            this.numTaskPaneWidth.Location = new System.Drawing.Point(16, 108);
+            this.numTaskPaneWidth.Name = "numTaskPaneWidth";
+            this.numTaskPaneWidth.Size = new System.Drawing.Size(129, 20);
+            this.numTaskPaneWidth.TabIndex = 4;
             // 
-            // numInfoPaneWidth
+            // chkTaskBar
             // 
-            this.numInfoPaneWidth.Location = new System.Drawing.Point(17, 105);
-            this.numInfoPaneWidth.Name = "numInfoPaneWidth";
-            this.numInfoPaneWidth.Size = new System.Drawing.Size(129, 20);
-            this.numInfoPaneWidth.TabIndex = 2;
+            this.chkTaskBar.AutoSize = true;
+            this.chkTaskBar.Location = new System.Drawing.Point(19, 43);
+            this.chkTaskBar.Name = "chkTaskBar";
+            this.chkTaskBar.Size = new System.Drawing.Size(69, 17);
+            this.chkTaskBar.TabIndex = 1;
+            this.chkTaskBar.Text = "Task Bar";
+            this.chkTaskBar.UseVisualStyleBackColor = true;
             // 
-            // label7
+            // chkTaskPane
             // 
-            this.label7.AutoSize = true;
-            this.label7.Location = new System.Drawing.Point(17, 86);
-            this.label7.Name = "label7";
-            this.label7.Size = new System.Drawing.Size(81, 13);
-            this.label7.TabIndex = 3;
-            this.label7.Text = "Width (in pixels)";
+            this.chkTaskPane.AutoSize = true;
+            this.chkTaskPane.Location = new System.Drawing.Point(19, 20);
+            this.chkTaskPane.Name = "chkTaskPane";
+            this.chkTaskPane.Size = new System.Drawing.Size(78, 17);
+            this.chkTaskPane.TabIndex = 0;
+            this.chkTaskPane.Text = "Task Pane";
+            this.chkTaskPane.UseVisualStyleBackColor = true;
+            this.chkTaskPane.CheckedChanged += new System.EventHandler(this.chkTaskPane_CheckedChanged);
             // 
-            // chkToolbar
+            // groupBox4
             // 
-            this.chkToolbar.AutoSize = true;
-            this.chkToolbar.Location = new System.Drawing.Point(21, 20);
-            this.chkToolbar.Name = "chkToolbar";
-            this.chkToolbar.Size = new System.Drawing.Size(62, 17);
-            this.chkToolbar.TabIndex = 0;
-            this.chkToolbar.Text = "Toolbar";
-            this.chkToolbar.UseVisualStyleBackColor = true;
+            this.groupBox4.Controls.Add(this.chkZoomControl);
+            this.groupBox4.Controls.Add(this.chkStatusBar);
+            this.groupBox4.Controls.Add(this.chkContextMenu);
+            this.groupBox4.Controls.Add(this.chkToolbar);
+            this.groupBox4.Location = new System.Drawing.Point(186, 20);
+            this.groupBox4.Name = "groupBox4";
+            this.groupBox4.Size = new System.Drawing.Size(154, 142);
+            this.groupBox4.TabIndex = 1;
+            this.groupBox4.TabStop = false;
+            this.groupBox4.Text = "Map Pane";
             // 
-            // chkContextMenu
+            // chkZoomControl
             // 
-            this.chkContextMenu.AutoSize = true;
-            this.chkContextMenu.Location = new System.Drawing.Point(21, 43);
-            this.chkContextMenu.Name = "chkContextMenu";
-            this.chkContextMenu.Size = new System.Drawing.Size(92, 17);
-            this.chkContextMenu.TabIndex = 1;
-            this.chkContextMenu.Text = "Context Menu";
-            this.chkContextMenu.UseVisualStyleBackColor = true;
+            this.chkZoomControl.AutoSize = true;
+            this.chkZoomControl.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
+            this.chkZoomControl.Location = new System.Drawing.Point(21, 89);
+            this.chkZoomControl.Name = "chkZoomControl";
+            this.chkZoomControl.Size = new System.Drawing.Size(117, 30);
+            this.chkZoomControl.TabIndex = 3;
+            this.chkZoomControl.Text = "Zoom Control \r\n(AJAX Viewer Only)";
+            this.chkZoomControl.UseVisualStyleBackColor = true;
             // 
             // chkStatusBar
             // 
@@ -344,53 +324,77 @@
             this.chkStatusBar.Text = "Status Bar";
             this.chkStatusBar.UseVisualStyleBackColor = true;
             // 
-            // chkZoomControl
+            // chkContextMenu
             // 
-            this.chkZoomControl.AutoSize = true;
-            this.chkZoomControl.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
-            this.chkZoomControl.Location = new System.Drawing.Point(21, 89);
-            this.chkZoomControl.Name = "chkZoomControl";
-            this.chkZoomControl.Size = new System.Drawing.Size(117, 30);
-            this.chkZoomControl.TabIndex = 3;
-            this.chkZoomControl.Text = "Zoom Control \r\n(AJAX Viewer Only)";
-            this.chkZoomControl.UseVisualStyleBackColor = true;
+            this.chkContextMenu.AutoSize = true;
+            this.chkContextMenu.Location = new System.Drawing.Point(21, 43);
+            this.chkContextMenu.Name = "chkContextMenu";
+            this.chkContextMenu.Size = new System.Drawing.Size(92, 17);
+            this.chkContextMenu.TabIndex = 1;
+            this.chkContextMenu.Text = "Context Menu";
+            this.chkContextMenu.UseVisualStyleBackColor = true;
             // 
-            // chkTaskPane
+            // chkToolbar
             // 
-            this.chkTaskPane.AutoSize = true;
-            this.chkTaskPane.Location = new System.Drawing.Point(19, 20);
-            this.chkTaskPane.Name = "chkTaskPane";
-            this.chkTaskPane.Size = new System.Drawing.Size(78, 17);
-            this.chkTaskPane.TabIndex = 0;
-            this.chkTaskPane.Text = "Task Pane";
-            this.chkTaskPane.UseVisualStyleBackColor = true;
+            this.chkToolbar.AutoSize = true;
+            this.chkToolbar.Location = new System.Drawing.Point(21, 20);
+            this.chkToolbar.Name = "chkToolbar";
+            this.chkToolbar.Size = new System.Drawing.Size(62, 17);
+            this.chkToolbar.TabIndex = 0;
+            this.chkToolbar.Text = "Toolbar";
+            this.chkToolbar.UseVisualStyleBackColor = true;
             // 
-            // chkTaskBar
+            // groupBox3
             // 
-            this.chkTaskBar.AutoSize = true;
-            this.chkTaskBar.Location = new System.Drawing.Point(19, 43);
-            this.chkTaskBar.Name = "chkTaskBar";
-            this.chkTaskBar.Size = new System.Drawing.Size(69, 17);
-            this.chkTaskBar.TabIndex = 1;
-            this.chkTaskBar.Text = "Task Bar";
-            this.chkTaskBar.UseVisualStyleBackColor = true;
+            this.groupBox3.Controls.Add(this.label7);
+            this.groupBox3.Controls.Add(this.numInfoPaneWidth);
+            this.groupBox3.Controls.Add(this.chkProperties);
+            this.groupBox3.Controls.Add(this.chkLegend);
+            this.groupBox3.Location = new System.Drawing.Point(19, 20);
+            this.groupBox3.Name = "groupBox3";
+            this.groupBox3.Size = new System.Drawing.Size(161, 142);
+            this.groupBox3.TabIndex = 0;
+            this.groupBox3.TabStop = false;
+            this.groupBox3.Text = "Information Pane";
             // 
-            // label8
+            // label7
             // 
-            this.label8.AutoSize = true;
-            this.label8.Location = new System.Drawing.Point(16, 89);
-            this.label8.Name = "label8";
-            this.label8.Size = new System.Drawing.Size(81, 13);
-            this.label8.TabIndex = 5;
-            this.label8.Text = "Width (in pixels)";
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(17, 86);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(81, 13);
+            this.label7.TabIndex = 3;
+            this.label7.Text = "Width (in pixels)";
             // 
-            // numTaskPaneWidth
+            // numInfoPaneWidth
             // 
-            this.numTaskPaneWidth.Location = new System.Drawing.Point(16, 108);
-            this.numTaskPaneWidth.Name = "numTaskPaneWidth";
-            this.numTaskPaneWidth.Size = new System.Drawing.Size(129, 20);
-            this.numTaskPaneWidth.TabIndex = 4;
+            this.numInfoPaneWidth.Location = new System.Drawing.Point(17, 105);
+            this.numInfoPaneWidth.Name = "numInfoPaneWidth";
+            this.numInfoPaneWidth.Size = new System.Drawing.Size(129, 20);
+            this.numInfoPaneWidth.TabIndex = 2;
             // 
+            // chkProperties
+            // 
+            this.chkProperties.AutoSize = true;
+            this.chkProperties.Location = new System.Drawing.Point(17, 43);
+            this.chkProperties.Name = "chkProperties";
+            this.chkProperties.Size = new System.Drawing.Size(101, 17);
+            this.chkProperties.TabIndex = 1;
+            this.chkProperties.Text = "Properties Pane";
+            this.chkProperties.UseVisualStyleBackColor = true;
+            this.chkProperties.CheckedChanged += new System.EventHandler(this.chkProperties_CheckedChanged);
+            // 
+            // chkLegend
+            // 
+            this.chkLegend.AutoSize = true;
+            this.chkLegend.Location = new System.Drawing.Point(17, 20);
+            this.chkLegend.Name = "chkLegend";
+            this.chkLegend.Size = new System.Drawing.Size(88, 17);
+            this.chkLegend.TabIndex = 0;
+            this.chkLegend.Text = "Layer Control";
+            this.chkLegend.UseVisualStyleBackColor = true;
+            this.chkLegend.CheckedChanged += new System.EventHandler(this.chkLegend_CheckedChanged);
+            // 
             // label9
             // 
             this.label9.AutoSize = true;
@@ -420,11 +424,13 @@
             // 
             // cmbHyperlinkTarget
             // 
+            this.cmbHyperlinkTarget.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
             this.cmbHyperlinkTarget.FormattingEnabled = true;
             this.cmbHyperlinkTarget.Location = new System.Drawing.Point(152, 342);
             this.cmbHyperlinkTarget.Name = "cmbHyperlinkTarget";
             this.cmbHyperlinkTarget.Size = new System.Drawing.Size(98, 21);
             this.cmbHyperlinkTarget.TabIndex = 10;
+            this.cmbHyperlinkTarget.SelectedIndexChanged += new System.EventHandler(this.cmbHyperlinkTarget_SelectedIndexChanged);
             // 
             // label10
             // 
@@ -450,6 +456,7 @@
                         | System.Windows.Forms.AnchorStyles.Right)));
             this.txtAjaxViewerUrl.Location = new System.Drawing.Point(152, 369);
             this.txtAjaxViewerUrl.Name = "txtAjaxViewerUrl";
+            this.txtAjaxViewerUrl.ReadOnly = true;
             this.txtAjaxViewerUrl.Size = new System.Drawing.Size(389, 20);
             this.txtAjaxViewerUrl.TabIndex = 13;
             // 
@@ -475,12 +482,12 @@
             this.groupBox1.ResumeLayout(false);
             this.groupBox1.PerformLayout();
             this.groupBox2.ResumeLayout(false);
+            this.groupBox5.ResumeLayout(false);
+            this.groupBox5.PerformLayout();
+            this.groupBox4.ResumeLayout(false);
+            this.groupBox4.PerformLayout();
             this.groupBox3.ResumeLayout(false);
             this.groupBox3.PerformLayout();
-            this.groupBox4.ResumeLayout(false);
-            this.groupBox4.PerformLayout();
-            this.groupBox5.ResumeLayout(false);
-            this.groupBox5.PerformLayout();
             this.ResumeLayout(false);
 
         }
@@ -501,7 +508,7 @@
         private System.Windows.Forms.GroupBox groupBox5;
         private System.Windows.Forms.GroupBox groupBox4;
         private System.Windows.Forms.GroupBox groupBox3;
-        private System.Windows.Forms.CheckBox checkBox1;
+        private System.Windows.Forms.CheckBox chkCustomView;
         private System.Windows.Forms.TextBox numX;
         private System.Windows.Forms.TextBox numY;
         private System.Windows.Forms.TextBox numScale;

Modified: sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutSettingsCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutSettingsCtrl.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/Maestro.Editors/WebLayout/WebLayoutSettingsCtrl.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -26,6 +26,8 @@
 using System.Windows.Forms;
 using Maestro.Shared.UI;
 using Maestro.Editors.Common;
+using OSGeo.MapGuide.ObjectModels.WebLayout;
+using OSGeo.MapGuide.MaestroAPI.ObjectModels;
 
 namespace Maestro.Editors.WebLayout
 {
@@ -37,9 +39,114 @@
             InitializeComponent();
         }
 
+        protected override void OnLoad(EventArgs e)
+        {
+            cmbHyperlinkTarget.DataSource = Enum.GetValues(typeof(TargetType));
+        }
+
+        private IEditorService _edsvc;
+        private WebLayoutType _wl;
+
+        private MapViewType _view;
+
         public override void Bind(IEditorService service)
         {
+            _edsvc = service;
+            _edsvc.RegisterCustomNotifier(this);
+
+            _wl = (WebLayoutType)_edsvc.GetEditedResource();
+
+            _view = _wl.Map.InitialView;
+            if (_view == null)
+            {
+                _view = new MapViewType();
+                chkCustomView.Checked = false;
+            }
+            else 
+            {
+                chkCustomView.Checked = true;
+            }
+            CheckInitialView();
+
+            TextBoxBinder.BindText(numX, _view, "CenterX");
+            TextBoxBinder.BindText(numY, _view, "CenterY");
+            TextBoxBinder.BindText(numScale, _view, "Scale");
             
+            TextBoxBinder.BindText(txtBrowserTitle, _wl, "Title");
+            TextBoxBinder.BindText(txtMapDefinition, _wl.Map, "ResourceId");
+            TextBoxBinder.BindText(txtInitialTaskPaneUrl, _wl.TaskPane, "InitialTask");
+
+            CheckBoxBinder.BindChecked(chkContextMenu, _wl.ContextMenu, "Visible");
+            CheckBoxBinder.BindChecked(chkLegend, _wl.InformationPane, "LegendVisible");
+            CheckBoxBinder.BindChecked(chkProperties, _wl.InformationPane, "PropertiesVisible");
+            CheckBoxBinder.BindChecked(chkStatusBar, _wl.StatusBar, "Visible");
+
+            CheckBoxBinder.BindChecked(chkTaskPane, _wl.TaskPane, "Visible");
+            CheckBoxBinder.BindChecked(chkToolbar, _wl.ToolBar, "Visible");
+            CheckBoxBinder.BindChecked(chkZoomControl, _wl.ZoomControl, "Visible");
+
+            cmbHyperlinkTarget.DataBindings.Add("SelectedItem", _wl.Map, "HyperlinkTarget");
+            TextBoxBinder.BindText(txtHyperlinkFrame, _wl.Map, "HyperlinkTargetFrame");
+
+            TextBoxBinder.BindText(numInfoPaneWidth, _wl.InformationPane, "Width");
+            TextBoxBinder.BindText(numTaskPaneWidth, _wl.TaskPane, "Width");
+
+            _wl.PropertyChanged += OnWebLayoutPropertyChanged;
         }
+
+        void OnWebLayoutPropertyChanged(object sender, PropertyChangedEventArgs e)
+        {
+            OnResourceChanged();
+        }
+
+        protected override void UnsubscribeEventHandlers()
+        {
+            if (_wl != null)
+                _wl.PropertyChanged -= OnWebLayoutPropertyChanged;
+
+            base.UnsubscribeEventHandlers();
+        }
+
+        private void chkCustomView_CheckedChanged(object sender, EventArgs e)
+        {
+            CheckInitialView();
+        }
+
+        private void CheckInitialView()
+        {
+            numX.Enabled = numY.Enabled = numScale.Enabled = chkCustomView.Checked;
+            if (chkCustomView.Checked)
+                _wl.Map.InitialView = _view;
+            else
+                _wl.Map.InitialView = null;
+        }
+
+        private void chkTaskPane_CheckedChanged(object sender, EventArgs e)
+        {
+            numTaskPaneWidth.Enabled = chkTaskPane.Checked;
+        }
+
+        private void CheckLeftPaneVisibility()
+        {
+            numInfoPaneWidth.Enabled = chkLegend.Checked || chkProperties.Checked;
+        }
+
+        private void chkLegend_CheckedChanged(object sender, EventArgs e)
+        {
+            CheckLeftPaneVisibility();
+        }
+
+        private void chkProperties_CheckedChanged(object sender, EventArgs e)
+        {
+            CheckLeftPaneVisibility();
+        }
+
+        private void cmbHyperlinkTarget_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (cmbHyperlinkTarget.SelectedItem == null)
+                txtHyperlinkFrame.Enabled = false;
+
+            txtHyperlinkFrame.Enabled = (((TargetType)cmbHyperlinkTarget.SelectedItem) == TargetType.SpecifiedFrame);
+        }
     }
 }

Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/ObjectFactory.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/ObjectFactory.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/ObjectFactory.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -793,5 +793,39 @@
                 VerticalAlignment = "'Baseline'"
             };
         }
+
+        public static InvokeURLCommandType CreateInvokeUrlCommand()
+        {
+            return new InvokeURLCommandType()
+            {
+                Target = TargetType.TaskPane,
+                DisableIfSelectionEmpty = false,
+                ImageURL = "../stdicons/icon_invokeurl.gif",
+                DisabledImageURL = "../stdicons/icon_invokeurl_disabled.gif",
+                TargetViewer = TargetViewerType.All
+            };
+        }
+
+        public static SearchCommandType CreateSearchCommand()
+        {
+            return new SearchCommandType()
+            {
+                ResultColumns = new System.ComponentModel.BindingList<ResultColumnType>(),
+                Target = TargetType.TaskPane,
+                TargetViewer = TargetViewerType.All,
+                DisabledImageURL = "../stdicons/icon_search_disabled.gif",
+                ImageURL = "../stdicons/icon_search.gif"
+            };
+        }
+
+        public static InvokeScriptCommandType CreateInvokeScriptCommand()
+        {
+            return new InvokeScriptCommandType()
+            {
+                DisabledImageURL = "../stdicons/icon_invokescript_disabled.gif",
+                ImageURL = "../stdicons/icon_invokescript.gif",
+                TargetViewer = TargetViewerType.All
+            };
+        }
     }
 }

Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/WebLayout.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/WebLayout.cs	2010-07-28 02:50:54 UTC (rev 5058)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/WebLayout.cs	2010-07-29 13:13:00 UTC (rev 5059)
@@ -137,5 +137,129 @@
         {
             get { return true; }
         }
+        
+        /// <summary>
+        /// Indicates whether a given command is referenced in the user interface
+        /// </summary>
+        /// <param name="name"></param>
+        /// <param name="region"></param>
+        /// <returns></returns>
+        public bool IsCommandReferenced(string name, out WebLayoutRegion[] region)
+        {
+            region = new WebLayoutRegion[0];
+            List<WebLayoutRegion> regions = new List<WebLayoutRegion>();
+            if (FindCommand(name, contextMenuField.MenuItem))
+            {
+                regions.Add(WebLayoutRegion.ContextMenu);
+            }
+
+            if (FindCommand(name, toolBarField.Button))
+            {
+                regions.Add(WebLayoutRegion.Toolbar);
+            }
+
+            if (FindCommand(name, taskPaneField.TaskBar.MenuButton))
+            {
+                regions.Add(WebLayoutRegion.TaskBar);
+            }
+
+            region = regions.ToArray();
+            return region.Length > 0;
+        }
+
+        /// <summary>
+        /// Removes all references of a given command
+        /// </summary>
+        /// <param name="cmdName"></param>
+        /// <returns>The number of references removed</returns>
+        public int RemoveAllReferences(string cmdName)
+        {
+            int removed = 0;
+            removed += RemoveInternal(cmdName, contextMenuField.MenuItem);
+            removed += RemoveInternal(cmdName, toolBarField.Button);
+            removed += RemoveInternal(cmdName, taskPaneField.TaskBar.MenuButton);
+            return removed;
+        }
+
+        private int RemoveInternal(string cmdName, IList<UIItemType> items)
+        {
+            int foundCount = 0;
+            List<IList<UIItemType>> subItemCheck = new List<IList<UIItemType>>();
+            List<UIItemType> found = new List<UIItemType>();
+            foreach (var item in items)
+            {
+                if (item.Function == UIItemFunctionType.Command)
+                {
+                    if (((CommandItemType)item).Command == cmdName)
+                        found.Add(item);
+                }
+                else if (item.Function == UIItemFunctionType.Flyout)
+                {
+                    subItemCheck.Add(((FlyoutItemType)item).SubItem);
+                }
+            }
+            foundCount += found.Count;
+            //Purge any found
+            foreach (var item in found)
+            {
+                items.Remove(item);
+            }
+            //Check these sub lists
+            foreach (var list in subItemCheck)
+            {
+                foundCount += RemoveInternal(cmdName, list);
+            }
+
+            return foundCount;
+        }
+
+        public CommandType GetCommandByName(string cmdName)
+        {
+            foreach (var cmd in this.CommandSet)
+            {
+                if (cmd.Name == cmdName)
+                    return cmd;
+            }
+
+            return null;
+        }
+
+        public IEnumerable<CommandType> GetCustomCommands()
+        {
+            foreach (var cmd in this.CommandSet)
+            {
+                var type = cmd.GetType();
+                if (typeof(InvokeURLCommandType).IsAssignableFrom(type) ||
+                    typeof(InvokeScriptCommandType).IsAssignableFrom(type) ||
+                    typeof(SearchCommandType).IsAssignableFrom(type))
+                {
+                    yield return cmd;
+                }
+            }
+        }
+
+        private bool FindCommand(string name, IEnumerable<UIItemType> items)
+        {
+            foreach (var item in items)
+            {
+                if (item.Function == UIItemFunctionType.Command)
+                {
+                    if (((CommandItemType)item).Command == name)
+                        return true;
+                }
+                else if (item.Function == UIItemFunctionType.Flyout)
+                {
+                    return FindCommand(name, ((FlyoutItemType)item).SubItem);
+                }
+            }
+            return false;
+        }
     }
+
+    public enum WebLayoutRegion
+    {
+        ContextMenu,
+        Toolbar,
+        TaskBar
+    }
 }



More information about the mapguide-commits mailing list