[mapguide-commits] r5021 - in sandbox/maestro-3.0: Generated Maestro.Base Maestro.Base/Commands/Test Maestro.Editors Maestro.Editors/Common OSGeo.MapGuide.MaestroAPI OSGeo.MapGuide.MaestroAPI/ObjectModels

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Sat Jul 10 09:51:04 EDT 2010


Author: jng
Date: 2010-07-10 13:51:04 +0000 (Sat, 10 Jul 2010)
New Revision: 5021

Added:
   sandbox/maestro-3.0/Maestro.Base/Commands/Test/OpenUnmanagedResourceCommand.cs
   sandbox/maestro-3.0/Maestro.Editors/Common/UnmanagedFileBrowser.Designer.cs
   sandbox/maestro-3.0/Maestro.Editors/Common/UnmanagedFileBrowser.cs
   sandbox/maestro-3.0/Maestro.Editors/Common/UnmanagedFileBrowser.resx
   sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/UnmanagedDataList.cs
Modified:
   sandbox/maestro-3.0/Generated/UnmanagedDataList-1.0.0.designer.cs
   sandbox/maestro-3.0/Maestro.Base/Maestro.Base.addin
   sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj
   sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj
   sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
Log:
This submission includes the following changes:
 - Implement the Unmanaged File Browser
 - Add a test command to test the unmanaged file browser
 - Modify some of the generated code for UnmanagedDataList and add some helper properties for UnmanagedDataListUnmanagedDataFile and UnmanagedDataListUnmanagedDataFolder

Modified: sandbox/maestro-3.0/Generated/UnmanagedDataList-1.0.0.designer.cs
===================================================================
--- sandbox/maestro-3.0/Generated/UnmanagedDataList-1.0.0.designer.cs	2010-07-09 19:49:00 UTC (rev 5020)
+++ sandbox/maestro-3.0/Generated/UnmanagedDataList-1.0.0.designer.cs	2010-07-10 13:51:04 UTC (rev 5021)
@@ -493,10 +493,10 @@
         private System.DateTime modifiedDateField;
         
         [EditorBrowsable(EditorBrowsableState.Never)]
-        private string numberOfFoldersField;
+        private int numberOfFoldersField;
         
         [EditorBrowsable(EditorBrowsableState.Never)]
-        private string numberOfFilesField;
+        private int numberOfFilesField;
         
         private static System.Xml.Serialization.XmlSerializer serializer;
         
@@ -542,8 +542,8 @@
             }
         }
         
-        [System.Xml.Serialization.XmlElementAttribute(DataType="integer")]
-        public string NumberOfFolders {
+        [System.Xml.Serialization.XmlElementAttribute]
+        public int NumberOfFolders {
             get {
                 return this.numberOfFoldersField;
             }
@@ -561,8 +561,8 @@
             }
         }
         
-        [System.Xml.Serialization.XmlElementAttribute(DataType="integer")]
-        public string NumberOfFiles {
+        [System.Xml.Serialization.XmlElementAttribute]
+        public int NumberOfFiles {
             get {
                 return this.numberOfFilesField;
             }

Added: sandbox/maestro-3.0/Maestro.Base/Commands/Test/OpenUnmanagedResourceCommand.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Commands/Test/OpenUnmanagedResourceCommand.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Base/Commands/Test/OpenUnmanagedResourceCommand.cs	2010-07-10 13:51:04 UTC (rev 5021)
@@ -0,0 +1,49 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+using ICSharpCode.Core;
+using Maestro.Editors.Common;
+using Maestro.Base.Services;
+
+namespace Maestro.Base.Commands.Test
+{
+    public class OpenUnmanagedResourceCommand : AbstractMenuCommand
+    {
+        public override void Run()
+        {
+            var wb = Workbench.Instance;
+            var exp = wb.ActiveSiteExplorer;
+            var mgr = ServiceRegistry.GetService<ServerConnectionManager>();
+            var conn = mgr.GetConnection(exp.ConnectionName);
+
+            var picker = new UnmanagedFileBrowser(conn.ResourceService);
+            if (picker.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+            {
+                MessageService.ShowMessage(picker.SelectedFile);
+            }
+            else
+            {
+                MessageService.ShowMessage("Cancelled");
+            }
+        }
+    }
+}

Modified: sandbox/maestro-3.0/Maestro.Base/Maestro.Base.addin
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Maestro.Base.addin	2010-07-09 19:49:00 UTC (rev 5020)
+++ sandbox/maestro-3.0/Maestro.Base/Maestro.Base.addin	2010-07-10 13:51:04 UTC (rev 5021)
@@ -69,6 +69,9 @@
                 <MenuItem id="Menu_Test_OpenFolder"
                           label="Open Folder"
                           class="Maestro.Base.Commands.Test.OpenFolderCommand" />
+                <MenuItem id="Menu_Test_OpenUnmanagedFile"
+                          label="Open Unmanaged Resource"
+                          class="Maestro.Base.Commands.Test.OpenUnmanagedResourceCommand" />
                 <MenuItem id="Menu_Test_SelectCoordSys"
                           label="Select Coordinate System"
                           class="Maestro.Base.Commands.Test.OpenCoordinateSystemPickerCommand" />

Modified: sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj	2010-07-09 19:49:00 UTC (rev 5020)
+++ sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj	2010-07-10 13:51:04 UTC (rev 5021)
@@ -3,7 +3,7 @@
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.30729</ProductVersion>
+    <ProductVersion>9.0.21022</ProductVersion>
     <SchemaVersion>2.0</SchemaVersion>
     <ProjectGuid>{F1E2F468-5030-4DBA-968C-9620284AFAA1}</ProjectGuid>
     <OutputType>Library</OutputType>
@@ -68,6 +68,7 @@
     <Compile Include="Commands\Test\OpenCoordinateSystemPickerCommand.cs" />
     <Compile Include="Commands\Test\OpenResourceCommand.cs" />
     <Compile Include="Commands\Test\OpenSymbolBrowserCommand.cs" />
+    <Compile Include="Commands\Test\OpenUnmanagedResourceCommand.cs" />
     <Compile Include="Commands\Test\SelectFdoProviderCommand.cs" />
     <Compile Include="Commands\Toggle\ToggleMessagesCommand.cs" />
     <Compile Include="Commands\ValidateResourceCommand.cs" />
@@ -272,6 +273,7 @@
   <ItemGroup>
     <EmbeddedResource Include="Editor\DrawingSourceEditor.resx">
       <DependentUpon>DrawingSourceEditor.cs</DependentUpon>
+      <SubType>Designer</SubType>
     </EmbeddedResource>
     <EmbeddedResource Include="Editor\EditorContentBase.resx">
       <DependentUpon>EditorContentBase.cs</DependentUpon>
@@ -291,6 +293,7 @@
     </EmbeddedResource>
     <EmbeddedResource Include="Editor\MapDefinitionEditor.resx">
       <DependentUpon>MapDefinitionEditor.cs</DependentUpon>
+      <SubType>Designer</SubType>
     </EmbeddedResource>
     <EmbeddedResource Include="Editor\WebLayoutEditor.resx">
       <DependentUpon>WebLayoutEditor.cs</DependentUpon>

Added: sandbox/maestro-3.0/Maestro.Editors/Common/UnmanagedFileBrowser.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Common/UnmanagedFileBrowser.Designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/Common/UnmanagedFileBrowser.Designer.cs	2010-07-10 13:51:04 UTC (rev 5021)
@@ -0,0 +1,246 @@
+namespace Maestro.Editors.Common
+{
+    partial class UnmanagedFileBrowser
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UnmanagedFileBrowser));
+            this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+            this.label3 = new System.Windows.Forms.Label();
+            this.trvFolders = new Aga.Controls.Tree.TreeViewAdv();
+            this.NODE_ICON = new Aga.Controls.Tree.NodeControls.NodeIcon();
+            this.NODE_NAME = new Aga.Controls.Tree.NodeControls.NodeTextBox();
+            this.lstResources = new System.Windows.Forms.ListView();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label1 = new System.Windows.Forms.Label();
+            this.txtFile = new System.Windows.Forms.TextBox();
+            this.btnOK = new System.Windows.Forms.Button();
+            this.btnCancel = new System.Windows.Forms.Button();
+            this.imgFileList = new System.Windows.Forms.ImageList(this.components);
+            this.splitContainer1.Panel1.SuspendLayout();
+            this.splitContainer1.Panel2.SuspendLayout();
+            this.splitContainer1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // splitContainer1
+            // 
+            this.splitContainer1.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.splitContainer1.Location = new System.Drawing.Point(0, 0);
+            this.splitContainer1.Name = "splitContainer1";
+            // 
+            // splitContainer1.Panel1
+            // 
+            this.splitContainer1.Panel1.Controls.Add(this.label3);
+            this.splitContainer1.Panel1.Controls.Add(this.trvFolders);
+            // 
+            // splitContainer1.Panel2
+            // 
+            this.splitContainer1.Panel2.Controls.Add(this.lstResources);
+            this.splitContainer1.Panel2.Controls.Add(this.label4);
+            this.splitContainer1.Size = new System.Drawing.Size(607, 274);
+            this.splitContainer1.SplitterDistance = 201;
+            this.splitContainer1.TabIndex = 11;
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(9, 9);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(41, 13);
+            this.label3.TabIndex = 8;
+            this.label3.Text = "Folders";
+            // 
+            // trvFolders
+            // 
+            this.trvFolders.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.trvFolders.BackColor = System.Drawing.SystemColors.Window;
+            this.trvFolders.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.trvFolders.DefaultToolTipProvider = null;
+            this.trvFolders.DragDropMarkColor = System.Drawing.Color.Black;
+            this.trvFolders.LineColor = System.Drawing.SystemColors.ControlDark;
+            this.trvFolders.LoadOnDemand = true;
+            this.trvFolders.Location = new System.Drawing.Point(12, 31);
+            this.trvFolders.Model = null;
+            this.trvFolders.Name = "trvFolders";
+            this.trvFolders.NodeControls.Add(this.NODE_ICON);
+            this.trvFolders.NodeControls.Add(this.NODE_NAME);
+            this.trvFolders.SelectedNode = null;
+            this.trvFolders.Size = new System.Drawing.Size(186, 229);
+            this.trvFolders.TabIndex = 0;
+            this.trvFolders.Text = "treeViewAdv1";
+            this.trvFolders.SelectionChanged += new System.EventHandler(this.trvFolders_SelectionChanged);
+            // 
+            // NODE_ICON
+            // 
+            this.NODE_ICON.DataPropertyName = "Icon";
+            this.NODE_ICON.LeftMargin = 1;
+            this.NODE_ICON.ParentColumn = null;
+            this.NODE_ICON.ScaleMode = Aga.Controls.Tree.ImageScaleMode.Clip;
+            // 
+            // NODE_NAME
+            // 
+            this.NODE_NAME.DataPropertyName = "Name";
+            this.NODE_NAME.IncrementalSearchEnabled = true;
+            this.NODE_NAME.LeftMargin = 3;
+            this.NODE_NAME.ParentColumn = null;
+            // 
+            // lstResources
+            // 
+            this.lstResources.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.lstResources.LargeImageList = this.imgFileList;
+            this.lstResources.Location = new System.Drawing.Point(3, 31);
+            this.lstResources.MultiSelect = false;
+            this.lstResources.Name = "lstResources";
+            this.lstResources.Size = new System.Drawing.Size(387, 229);
+            this.lstResources.SmallImageList = this.imgFileList;
+            this.lstResources.TabIndex = 1;
+            this.lstResources.UseCompatibleStateImageBehavior = false;
+            this.lstResources.View = System.Windows.Forms.View.List;
+            this.lstResources.SelectedIndexChanged += new System.EventHandler(this.lstResources_SelectedIndexChanged);
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(3, 9);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(68, 13);
+            this.label4.TabIndex = 9;
+            this.label4.Text = "Files in folder";
+            // 
+            // label1
+            // 
+            this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(9, 283);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(68, 13);
+            this.label1.TabIndex = 12;
+            this.label1.Text = "Selected File";
+            // 
+            // txtFile
+            // 
+            this.txtFile.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtFile.Location = new System.Drawing.Point(83, 280);
+            this.txtFile.Name = "txtFile";
+            this.txtFile.ReadOnly = true;
+            this.txtFile.Size = new System.Drawing.Size(512, 20);
+            this.txtFile.TabIndex = 13;
+            this.txtFile.TextChanged += new System.EventHandler(this.txtFile_TextChanged);
+            // 
+            // btnOK
+            // 
+            this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnOK.Enabled = false;
+            this.btnOK.Location = new System.Drawing.Point(438, 306);
+            this.btnOK.Name = "btnOK";
+            this.btnOK.Size = new System.Drawing.Size(75, 23);
+            this.btnOK.TabIndex = 14;
+            this.btnOK.Text = "OK";
+            this.btnOK.UseVisualStyleBackColor = true;
+            this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
+            // 
+            // btnCancel
+            // 
+            this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.btnCancel.Location = new System.Drawing.Point(520, 306);
+            this.btnCancel.Name = "btnCancel";
+            this.btnCancel.Size = new System.Drawing.Size(75, 23);
+            this.btnCancel.TabIndex = 15;
+            this.btnCancel.Text = "Cancel";
+            this.btnCancel.UseVisualStyleBackColor = true;
+            // 
+            // imgFileList
+            // 
+            this.imgFileList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgFileList.ImageStream")));
+            this.imgFileList.TransparentColor = System.Drawing.Color.Transparent;
+            this.imgFileList.Images.SetKeyName(0, "document.png");
+            this.imgFileList.Images.SetKeyName(1, "application.png");
+            this.imgFileList.Images.SetKeyName(2, "document-word.png");
+            this.imgFileList.Images.SetKeyName(3, "document-access.png");
+            this.imgFileList.Images.SetKeyName(4, "document-excel.png");
+            this.imgFileList.Images.SetKeyName(5, "document-excel-csv.png");
+            this.imgFileList.Images.SetKeyName(6, "document-film.png");
+            this.imgFileList.Images.SetKeyName(7, "document-globe.png");
+            this.imgFileList.Images.SetKeyName(8, "document-image.png");
+            this.imgFileList.Images.SetKeyName(9, "document-pdf.png");
+            this.imgFileList.Images.SetKeyName(10, "document-php.png");
+            this.imgFileList.Images.SetKeyName(11, "document-powerpoint.png");
+            this.imgFileList.Images.SetKeyName(12, "document-text.png");
+            this.imgFileList.Images.SetKeyName(13, "document-zipper.png");
+            this.imgFileList.Images.SetKeyName(14, "document-code.png");
+            // 
+            // UnmanagedFileBrowser
+            // 
+            this.AcceptButton = this.btnOK;
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.CancelButton = this.btnCancel;
+            this.ClientSize = new System.Drawing.Size(607, 341);
+            this.ControlBox = false;
+            this.Controls.Add(this.btnCancel);
+            this.Controls.Add(this.btnOK);
+            this.Controls.Add(this.txtFile);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.splitContainer1);
+            this.Name = "UnmanagedFileBrowser";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+            this.Text = "Select File";
+            this.splitContainer1.Panel1.ResumeLayout(false);
+            this.splitContainer1.Panel1.PerformLayout();
+            this.splitContainer1.Panel2.ResumeLayout(false);
+            this.splitContainer1.Panel2.PerformLayout();
+            this.splitContainer1.ResumeLayout(false);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.SplitContainer splitContainer1;
+        private System.Windows.Forms.Label label3;
+        private Aga.Controls.Tree.TreeViewAdv trvFolders;
+        private System.Windows.Forms.ListView lstResources;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox txtFile;
+        private System.Windows.Forms.Button btnOK;
+        private System.Windows.Forms.Button btnCancel;
+        private Aga.Controls.Tree.NodeControls.NodeIcon NODE_ICON;
+        private Aga.Controls.Tree.NodeControls.NodeTextBox NODE_NAME;
+        private System.Windows.Forms.ImageList imgFileList;
+    }
+}
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Editors/Common/UnmanagedFileBrowser.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Common/UnmanagedFileBrowser.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/Common/UnmanagedFileBrowser.cs	2010-07-10 13:51:04 UTC (rev 5021)
@@ -0,0 +1,269 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.MaestroAPI.Services;
+using Aga.Controls.Tree;
+using OSGeo.MapGuide.ObjectModels.Common;
+
+namespace Maestro.Editors.Common
+{
+    public partial class UnmanagedFileBrowser : Form
+    {
+        abstract class ModelBase<T>
+        {
+            public ModelBase(T item) { this.Tag = item; }
+
+            public T Tag { get; private set; }
+        }
+
+        class FolderModel : ModelBase<UnmanagedDataListUnmanagedDataFolder>
+        {
+            public FolderModel(UnmanagedDataListUnmanagedDataFolder folder) 
+                : base(folder)
+            {
+                this.Name = folder.FolderName;
+                this.HasChildren = (folder.NumberOfFolders > 0);
+            }
+
+            public string Name { get; private set; }
+
+            public bool HasChildren { get; private set; }
+
+            public Image Icon { get { return Properties.Resources.folder_horizontal; } }
+        }
+
+        class FolderTreeModel : ITreeModel
+        {
+            private IResourceService _resSvc;
+
+            public FolderTreeModel(IResourceService resSvc)
+            {
+                _resSvc = resSvc;
+            }
+
+            public System.Collections.IEnumerable GetChildren(TreePath treePath)
+            {
+                if (treePath.IsEmpty())
+                {
+                    var list = _resSvc.EnumerateUnmanagedData(null, null, false, OSGeo.MapGuide.MaestroAPI.UnmanagedDataTypes.Folders);
+                    foreach (var item in list.Items)
+                    {
+                        if (typeof(UnmanagedDataListUnmanagedDataFolder).IsAssignableFrom(item.GetType()))
+                        {
+                            var folder = (UnmanagedDataListUnmanagedDataFolder)item;
+
+                            yield return new FolderModel(folder);
+                        }
+                    }
+                }
+                else 
+                {
+                    var mdl = treePath.LastNode as FolderModel;
+                    if (mdl != null)
+                    {
+                        var folder = mdl.Tag;
+                        if (folder.NumberOfFolders > 0)
+                        {
+                            var list = _resSvc.EnumerateUnmanagedData(folder.UnmanagedDataId, null, false, OSGeo.MapGuide.MaestroAPI.UnmanagedDataTypes.Folders);
+                            foreach (var item in list.Items)
+                            {
+                                if (typeof(UnmanagedDataListUnmanagedDataFolder).IsAssignableFrom(item.GetType()))
+                                {
+                                    var fl = (UnmanagedDataListUnmanagedDataFolder)item;
+
+                                    yield return new FolderModel(fl);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            public bool IsLeaf(TreePath treePath)
+            {
+                var mdl = treePath.LastNode as FolderModel;
+                if (mdl != null)
+                    return mdl.Tag.NumberOfFolders == 0;
+                else
+                    return true;
+            }
+
+            public event EventHandler<TreeModelEventArgs> NodesChanged;
+
+            public event EventHandler<TreeModelEventArgs> NodesInserted;
+
+            public event EventHandler<TreeModelEventArgs> NodesRemoved;
+
+            public event EventHandler<TreePathEventArgs> StructureChanged;
+        }
+
+
+        private UnmanagedFileBrowser()
+        {
+            InitializeComponent();
+        }
+
+        private IResourceService _resSvc;
+
+        public UnmanagedFileBrowser(IResourceService resSvc)
+            : this()
+        {
+            _resSvc = resSvc;
+            trvFolders.Model = new FolderTreeModel(_resSvc);
+        }
+
+        public string SelectedFile
+        {
+            get { return txtFile.Text; }
+        }
+
+        private void trvFolders_SelectionChanged(object sender, EventArgs e)
+        {
+            if (trvFolders.SelectedNode != null)
+            {
+                var mdl = trvFolders.SelectedNode.Tag as FolderModel;
+                if (mdl != null)
+                {
+                    //TODO: file filter
+                    var list = _resSvc.EnumerateUnmanagedData(mdl.Tag.UnmanagedDataId, null, false, OSGeo.MapGuide.MaestroAPI.UnmanagedDataTypes.Files);
+                    PopulateFileList(list);
+                }
+            }
+        }
+
+        private void PopulateFileList(UnmanagedDataList list)
+        {
+            lstResources.Items.Clear();
+            foreach (var item in list.Items)
+            {
+                if (typeof(UnmanagedDataListUnmanagedDataFile).IsAssignableFrom(item.GetType()))
+                {
+                    var file = (UnmanagedDataListUnmanagedDataFile)item;
+                    var li = new ListViewItem();
+                    li.Name = file.UnmanagedDataId;
+                    li.Text = file.FileName;
+                    li.ImageIndex = GetImageIndex(li.Text);
+
+                    lstResources.Items.Add(li);
+                }
+            }
+        }
+
+        private int GetImageIndex(string fileName)
+        {
+            string ext = fileName.Substring(fileName.LastIndexOf(".") + 1);
+            switch (ext.ToUpper())
+            {
+                case "EXE":
+                    return IDX_FILE_EXE;
+                case "DOC":
+                case "DOCX":
+                    return IDX_FILE_DOC;
+                case "MDB":
+                case "ACCDB":
+                    return IDX_FILE_MDB;
+                case "XLS":
+                case "XLSX":
+                    return IDX_FILE_XLS;
+                case "CSV":
+                    return IDX_FILE_CSV;
+                case "MOV":
+                case "MPG":
+                case "AVI":
+                case "MP4":
+                case "WMV":
+                case "ASF":
+                case "FLV":
+                    return IDX_FILE_MOVIE;
+                case "HTM":
+                case "HTML":
+                    return IDX_FILE_HTML;
+                case "PNG":
+                case "JPG":
+                case "GIF":
+                case "ICO":
+                case "BMP":
+                case "TGA":
+                    return IDX_FILE_IMAGE;
+                case "PDF":
+                    return IDX_FILE_PDF;
+                case "PHP":
+                    return IDX_FILE_PHP;
+                case "PPT":
+                case "PPTX":
+                    return IDX_FILE_PPT;
+                case "TXT":
+                    return IDX_FILE_TXT;
+                case "ZIP":
+                case "RAR":
+                case "ACE":
+                case "7Z":
+                case "GZ":
+                case "TAR":
+                case "BZ2":
+                    return IDX_FILE_ARCHIVE;
+                case "XML":
+                    return IDX_FILE_XML;
+                default:
+                    return IDX_FILE_UNKNOWN;
+            }
+        }
+
+        const int IDX_FILE_UNKNOWN = 0;
+        const int IDX_FILE_EXE = 1;
+        const int IDX_FILE_DOC = 2;
+        const int IDX_FILE_MDB = 3;
+        const int IDX_FILE_XLS = 4;
+        const int IDX_FILE_CSV = 5;
+        const int IDX_FILE_MOVIE = 6;
+        const int IDX_FILE_HTML = 7;
+        const int IDX_FILE_IMAGE = 8;
+        const int IDX_FILE_PDF = 9;
+        const int IDX_FILE_PHP = 10;
+        const int IDX_FILE_PPT = 11;
+        const int IDX_FILE_TXT = 12;
+        const int IDX_FILE_ARCHIVE = 13;
+        const int IDX_FILE_XML = 14;
+
+        private void lstResources_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            if (lstResources.SelectedItems.Count == 1)
+            {
+                txtFile.Text = lstResources.SelectedItems[0].Name;
+            }
+        }
+
+        private void txtFile_TextChanged(object sender, EventArgs e)
+        {
+            btnOK.Enabled = !string.IsNullOrEmpty(txtFile.Text);
+        }
+
+        private void btnOK_Click(object sender, EventArgs e)
+        {
+            this.DialogResult = DialogResult.OK;
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Editors/Common/UnmanagedFileBrowser.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Common/UnmanagedFileBrowser.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/Common/UnmanagedFileBrowser.resx	2010-07-10 13:51:04 UTC (rev 5021)
@@ -0,0 +1,237 @@
+<?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="imgFileList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="imgFileList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADg
+        GAAAAk1TRnQBSQFMAgEBDwEAARMBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        AwABQAMAAUADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
+        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
+        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
+        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
+        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
+        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
+        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
+        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
+        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
+        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
+        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
+        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
+        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
+        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
+        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
+        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
+        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
+        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
+        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
+        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
+        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
+        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
+        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
+        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
+        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
+        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAAaEBhQwEAYUCoQGF
+        BQQBXwYEAYUCoQGFDAQBhQGhEAACoQEECv8BBAShAQQE/wEHAesE/wEEBKEBBAr/AQQCoRIAAaYH/wP1
+        AaYEAAGmA/8BBwHrAv8D9QGmBAABpgf/A/UBphQAAaYB/wLuAfABvAH/AvUB9AH1AaYEAAGmBP8BBwHr
+        AvUB9AH1AaYEAAGmBv8C9QH0AfUBphQAAYYB/wTzAvUC9AH1AYYEAAGGA/8BBwHrAvUC9AH1AYYEAAGG
+        Av8B8AHqAvIB6gG8AfQB9QGGFAABhgH/Ae4B8AHuAQcCvAHuAbwB9QGGBAABhgT/AQcB6wP0AfUBhgQA
+        AYYB/wHzAW0BBwL1AQcBbQHyAfUBhhQAAYYB/wPzAfIE8QH1AYYEAAGGA/8BBwHrBPQB9QGGBAABhgH/
+        Ae8B9wL1AvQB9wHvAfUBhhQAAYYB/wHuAgcBvAEHArwBBwH0AYYEAAGGAv8C9QEHAesE9AGGBAABhgH/
+        AfMB+AHuAvQBBwH4AfIB9AGGFAABhgH/AfMB8gbxAfQBhgQAAYYB/wL1AQcB6wGSAvQB8wH0AYYEAAGG
+        Af8B9QHxAewB8wHyAewBvAHzAfQBhhQAAYYB/wEHAbwEBwHuAQcB9AGGBAABhgH/AfUB9AGSAfEB6wH0
+        AvMB9AGGBAABhgH/AfUF9ALzAfQBhhQAAYYB9QTxAfQC8wHxAfQBhgQAAYYB9QL0AQcBkgHrAvMB8QH0
+        AYYEAAGGAfUF9ALzAfEB9AGGFAABhgH1AgcBvAEHAvMC8QH0AYYEAAGGAfUC9AEHAfMB6wHzAvEB9AGG
+        BAABhgH1BPQC8wLxAfQBhhQAAYYB9QP0AvMB8QP3AaYEAAGGAfUC9AEHAfEB6wHxA/cBpgQAAYYB9QP0
+        AvMB8QP3AaYUAAGGAfUC9ALzAvEB7wH/AYYBoQQAAYYB9QL0AQcBvAHrAfEB7wH/AYYBoQQAAYYB9QL0
+        AvMC8QHvAf8BhgGhFAABpwL1BfQBBwGnAaEFAAGnAvUB9AGSAQcBkgH0AQcBpwGhBQABpwL1BfQBBwGn
+        AaEVAAmnAaEGAASnAYYBBAGGAqcBoQYACacBoRQAAaEBhQwEAYUCoQGFDAQBhQKhAYUMBAGFAqEBhQwE
+        AYUDoQEECv8BBAShAQQK/wEEBKEBBAr/AQQEoQEECv8BBAKhAgABpgH/BSoBMQIqAfUBpgQAAaYH/wP1
+        AaYEAAGmB/8D9QGmBAABpgf/A/UBpgQAAaYB/wUxATcCMQH1AaYEAAGmBv8C9QH0AfUBpgQAAaYG/wL1
+        AfQB9QGmBAABpgb/AvUB9AH1AaYEAAGGAf8BKgMwATEBWQFYATEB9QGGBAABhgX/AvUC9AH1AYYEAAGG
+        Bf8C9QL0AfUBhgQAAYYF/wL1AvQB9QGGBAABhgH/AQ8BQwFEAUsBeQGgAXkBWAH1AYYCAAFhBx8BbwP0
+        AfUBhgQAAYYE/wL1A/QB9QGGAgABRQclAUwD9AH1AYYEAAGGAf8BFQFEAlgBegLlAVkB9QGGAgACHwMg
+        BB8D9AH1AYYDAAGhAYYErgG8BPQB9QGGAgABJQH2BfQB9gElA/QB9QGGBAABhgH/AUQBUQJYAVkB5QFZ
+        AVgB9AGGAgACIAHzAZMCRgEgAh8E9AGGAgABoQGuBc8BrgHuBPQBhgIAASsB9gEaA0wBGgH2ASsE9AGG
+        BAABhgH/AVIHWAH0AYYCAAIgAW8BvQGUAb0B9AFvAR8C9AHzAfQBhgIAAYYHtQGuAvQB8wH0AYYCAAEr
+        AfYBUgMrAVIB9gErAvQB8wH0AYYEAAGGAf8IWAH0AYYCAAMgAeMBbwG9AUYCIAH0AvMB9AGGAgABrgG1
+        AQABtQEAAbUBAAG1Aa4B9ALzAfQBhgIAAUwB9QJMAfQBGgF0AfUBTAH0AvMB9AGGBAABhgH1CDEB9AGG
+        AgADIAFGAb0BbwMgAvMB8QH0AYYCAAGuCLUC8wHxAfQBhgIAAUwB/wF1AUwBGgH2AZQB/wFMAvMB8QH0
+        AYYEAAGGAfUE9ALzAvEB9AGGAgADIAH5Af8BRgMgAfMC8QH0AYYCAAGnAc8FtQHPAe4B8wLxAfQBhgIA
+        AUwB/wH0AnUBmgH0Af8BTAHzAvEB9AGGBAABhgH1A/QC8wHxA/cBpgIAAiAC+QUgAfED9wGmAwABpwGu
+        A88BtQG8AfMB8QP3AaYCAAFTB/8BUwHxA/cBpgQAAYYB9QL0AvMC8QHvAf8BhgGhAgABYQcgAW8B8QHv
+        Af8BhgGhBAABhgH1AvQC8wLxAe8B/wGGAaECAAFvB1MBdAHxAe8B/wGGAaEEAAGnAvUF9AEHAacBoQUA
+        AacC9QX0AQcBpwGhBQABpwL1BfQBBwGnAaEFAAGnAvUF9AEHAacBoQUACacBoQYACacBoQYACacBoQYA
+        CacBoQQAAaEBhQwEAYUCoQGFDAQBhQKhAYUMBAGFAqEBhQwEAYUDoQEECv8BBAShAQQK/wEEBKEBBAr/
+        AQQEoQEECv8BBAKhAgABpgf/A/UBpgQAAaYH/wHsAbwB9QGmBAABpgH/AfgBEwQPARMB6wH1AaYEAAGm
+        Av8BGQG0ArMBtAEZAvUBpgQAAaYG/wL1AfQB9QGmBAABpgb/AvUBbQH1AaYEAAGmAf8B6gEHAUMBtAG1
+        AREBBwHqAfUBpgQAAaYB/wHyArMC1AKzAfEB9QGmBAABhgX/AvUC9AH1AYYEAAGGBf8C9QHtAW0B9QGG
+        BAABhgH/Am0BFQK0AUMCbQH1AYYEAAGGAf8BtAazAbQB9QGGAgABbAdPAXID9AH1AYYCAAFsB08BcgH0
+        AvgB9QGGBAABhgH/AW0BBwEVArQBFQEHAW0B9QGGBAABhgH/AYsDswGtAdQBrQGLAfUBhgIAAU8H9AFP
+        A/QB9QGGAgABTwf0AU8D9AH1AYYEAAGGAf8CbQEUAeoBQwEVAm0B9QGGBAABhgH/AYsFswHbAYsB9QGG
+        AgABUAH0A5gCUAH0AVAE9AGGAgABUAH0A5gCUAH0AVAE9AGGBAABhgH/AW0BBwETArUBFAEHAW0B9AGG
+        BAABhgH/AbQB3AG6AQkBugEJAdwBtAH0AYYCAAFQAfQBcwJQAQgBUAH0AVAC9AHzAfQBhgIAAVAB9AFz
+        AlABCAFQAfQBUAL0AfMB9AGGBAABhgH/AusBEwK1ARQC6wH0AYYEAAGGAf8BGQG0AdwBCQLcAbQB8AH0
+        AYYCAAFQAfUBCAFQAQgBUAEIAfUBUAH0AvMB9AGGAgABUAH1AQgBUAEIAVABCAH1AVAB9ALzAfQBhgQA
+        AYYB/wHrAbwBEgK1ARMBvAHrAfQBhgQAAYYB/wH1ARkB2wLUAdsBCQHzAfQBhgIAAXIB/wFyAfACcgF4
+        Af8BcgLzAfEB9AGGAgABcgH/AXIB8AJyAXgB/wFyAvMB8QH0AYYEAAGGAfUB7QHrBBIB6wHtAfQBhgQA
+        AYYB9QX0AvMB8QH0AYYCAAFyAf8CcgHxAZgBcgH/AXIB8wLxAfQBhgIAAXIB/wJyAfEBmAFyAf8BcgHz
+        AvEB9AGGBAABhgH1BPQC8wLxAfQBhgQAAYYB9QT0AvMC8QH0AYYCAAFzB/8BcwHxA/cBpgIAAXMH/wFz
+        AfED9wGmBAABhgH1A/QC8wHxA/cBpgQAAYYB9QP0AvMB8QP3AaYCAAHrB3MBmAHxAe8B/wGGAaECAAHr
+        B3MBmAHxAe8B/wGGAaEEAAGGAfUC9ALzAvEB7wH/AYYBoQQAAYYB9QL0AvMC8QHvAf8BhgGhBAABpwL1
+        BfQBBwGnAaEFAAGnAvUF9AEHAacBoQUAAacC9QX0AQcBpwGhBQABpwL1BfQBBwGnAaEFAAmnAaEGAAmn
+        AaEGAAmnAaEGAAmnAaEEAAGhAYUMBAGFAaEQAAGhAYUMBAGFAqEBhQwEAYUDoQEECv8BBBShAQQK/wEE
+        BKEBBAr/AQQCoQIAAaYH/wP1AaYCAAEEDl8BBAIAAaYH/wP1AaYEAAGmB/8D9QGmBAABpgb/AvUB9AH1
+        AaYCAAEEAfMM8gHzAQQCAAGmBv8C9QH0AfUBpgQAAaYG/wL1AfQB9QGmBAABhgX/AvUC9AH1AYYCAAEE
+        AfMM8gHzAQQCAAGGBf8C9QL0AfUBhgQAAYYF/wL1AvQB9QGGBAABhgT/AvUD9AH1AYYCAAGGAfMM8gHz
+        AYYIpgGtA/QB9QGGAgABBQdiAYgD9AH1AYYEAAGGA/8C9QT0AfUBhgIAAYYB9AzzAfQChgf0AYYD9AH1
+        AYYCAAFjB/QBYwP0AfUBhgQAAYYC/wL1BvQBhgIAAYYB9AzzAfQChgH0Aa0BiwHwAYsB8AH0AYYE9AGG
+        AgABYwH0AWMBsAPzAfQBYwT0AYYEAAGGAf8C9QX0AfMB9AGGAgABhg70AoYB9AGtAbQBtQG0AbUB9AGG
+        AvQB8wH0AYYCAAGIAfQBtgGIArYBvQH0AYgC9AHzAfQBhgQAAYYB/wH1BfQC8wH0AYYCAAGGDv8BhgGL
+        AfUBrQEJAc8BCQHPAfUBiwH0AvMB9AGGAgABiAH1AfQBtgOIAfUBiAH0AvMB9AGGBAABhgH1BfQC8wHx
+        AfQBhgIAAYYO/wGGAa0B/wGtAfQBrQH0Aa0B/wGtAvMB8QH0AYYCAAGIAf8B9QG3AYgBtwGIAf8BiALz
+        AfEB9AGGBAABhgH1BPQC8wLxAfQBhgIAAYYO/wGGAa0B3QGtAQkBrQEJAa0B3QGtAfMC8QH0AYYCAAGI
+        Av8BvQKIAbcB/wGIAfMC8QH0AYYEAAGGAfUD9ALzAfED9wGmAgABhgMHBu8D9wKSAQQBrQf/Aa0B8QP3
+        AaYCAAGPB/8BjwHxA/cBpgQAAYYB9QL0AvMC8QHvAf8BhgGhAgABhgG1AvEC8AK8AgcD7gG8AbUBhgGt
+        B88BtAHxAe8B/wGGAaECAAGqB48BsAHxAe8B/wGGAaEEAAGnAvUF9AEHAacBoQMAAaEOhgGhAgABpwL1
+        BfQBBwGnAaEFAAGnAvUF9AEHAacBoQUACacBoRYACacBoQYACacBoQQAAUIBTQE+BwABPgMAASgDAAFA
+        AwABQAMAAQEBAAEBBgABAhYAA/8RAAHAAQMBwAEDAcABAwIAAcABAwHAAQMBwAEDAgABwAEDAcABAwHA
+        AQMCAAHAAQMBwAEDAcABAwIAAcABAwHAAQMBwAEDAgABwAEDAcABAwHAAQMCAAHAAQMBwAEDAcABAwIA
+        AcABAwHAAQMBwAEDAgABwAEDAcABAwHAAQMCAAHAAQMBwAEDAcABAwIAAcABAwHAAQMBwAEDAgABwAED
+        AcABAwHAAQMCAAHAAQcBwAEHAcABBwIAAcABDwHAAQ8BwAEPEgABwAEDAcABAwHAAQMBwAEDAcABAwHA
+        AQMBwAEDAcABAwHAAQMBwAEDAcABAwHAAQMBwAEDAQABAwHAAQMBAAEDAcABAwEAAQMBgAEDAQABAwHA
+        AQMBAAEDAQABAwEAAQMBwAEDAQABAwEAAQMBAAEDAcABAwEAAQMBAAEDAQABAwHAAQMBAAEDAQABAwEA
+        AQMBwAEDAQABAwEAAQMBAAEDAcABAwEAAQMBgAEDAQABAwHAAQMBAAEDAcABAwEAAQMBwAEHAcABBwHA
+        AQcBwAEHAcABDwHAAQ8BwAEPAcABDxAAAcABAwHAAQMBwAEDAcABAwHAAQMBwAEDAcABAwHAAQMBwAED
+        AcABAwHAAQMBwAEDAQABAwEAAQMBwAEDAcABAwEAAQMBAAEDAcABAwHAAQMBAAEDAQABAwHAAQMBwAED
+        AQABAwEAAQMBwAEDAcABAwEAAQMBAAEDAcABAwHAAQMBAAEDAQABAwHAAQMBwAEDAQABAwEAAQMBwAED
+        AcABAwEAAQMBAAEDAcABAwHAAQMBAAEDAQABAwHAAQMBwAEDAcABBwHAAQcBwAEHAcABBwHAAQ8BwAEP
+        AcABDwHAAQ8CAAL/DAABwAEDAgABwAEDAcABAwHAAQMCAAHAAQMBwAEDAcABAwIAAcABAwHAAQMBwAED
+        AwABAwEAAQMBwAEDAwABAwEAAQMBwAEDAwABAwEAAQMBwAEDAwABAwEAAQMBwAEDAwABAwEAAQMBwAED
+        AwABAwEAAQMBwAEDAwABAwEAAQMBwAEDAwABAwEAAQMBwAEDAwABAwEAAQMBwAEHAgABwAEHAcABBwHA
+        AQ8C/wHAAQ8BwAEPCw==
+</value>
+  </data>
+</root>
\ No newline at end of file

Modified: sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj	2010-07-09 19:49:00 UTC (rev 5020)
+++ sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj	2010-07-10 13:51:04 UTC (rev 5021)
@@ -91,6 +91,12 @@
     <Compile Include="Common\SymbolPicker.Designer.cs">
       <DependentUpon>SymbolPicker.cs</DependentUpon>
     </Compile>
+    <Compile Include="Common\UnmanagedFileBrowser.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Common\UnmanagedFileBrowser.Designer.cs">
+      <DependentUpon>UnmanagedFileBrowser.cs</DependentUpon>
+    </Compile>
     <Compile Include="DrawingSource\DrawingSourceEditorCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -453,6 +459,10 @@
       <DependentUpon>SymbolPicker.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="Common\UnmanagedFileBrowser.resx">
+      <DependentUpon>UnmanagedFileBrowser.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
     <EmbeddedResource Include="DrawingSource\DrawingSourceEditorCtrl.resx">
       <DependentUpon>DrawingSourceEditorCtrl.cs</DependentUpon>
       <SubType>Designer</SubType>

Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj	2010-07-09 19:49:00 UTC (rev 5020)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj	2010-07-10 13:51:04 UTC (rev 5021)
@@ -197,6 +197,7 @@
     <Compile Include="ObjectModels\ResourceItems.cs" />
     <Compile Include="ObjectModels\SymbolDefinition.cs" />
     <Compile Include="ObjectModels\SymbolLibrary.cs" />
+    <Compile Include="ObjectModels\UnmanagedDataList.cs" />
     <Compile Include="ObjectModels\UntypedResource.cs" />
     <Compile Include="ObjectModels\WebLayout.cs" />
     <Compile Include="Platform.cs" />

Added: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/UnmanagedDataList.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/UnmanagedDataList.cs	                        (rev 0)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/UnmanagedDataList.cs	2010-07-10 13:51:04 UTC (rev 5021)
@@ -0,0 +1,81 @@
+#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.Xml.Serialization;
+using System.Diagnostics;
+
+namespace OSGeo.MapGuide.ObjectModels.Common
+{
+    partial class UnmanagedDataListUnmanagedDataFile
+    {
+        [XmlIgnore]
+        public string FileName
+        {
+            get
+            {
+                string str = this.unmanagedDataIdField;
+                if (!string.IsNullOrEmpty(str))
+                {
+                    if (str.Contains("/"))
+                    {
+                        return str.Substring(str.LastIndexOf("/") + 1);
+                    }
+                    else
+                    {
+                        return str.Substring(str.LastIndexOf("]") + 1);
+                    }
+                }
+                return string.Empty;
+            }
+        }
+    }
+
+    partial class UnmanagedDataListUnmanagedDataFolder
+    {
+        [XmlIgnore]
+        public string FolderName
+        {
+            get
+            {
+                string str = this.unmanagedDataIdField;
+                if (!string.IsNullOrEmpty(str))
+                {
+                    if (str.EndsWith("/")) 
+                        str = str.Substring(0, str.Length - 1);
+
+                    var tokens = str.Split('/');
+                    if (tokens.Length == 1)
+                    {
+                        var p = tokens[0];
+                        if (p.EndsWith("]"))
+                            return p;
+                        else
+                            return p.Substring(p.IndexOf("]") + 1);
+                    }
+                    else
+                        return tokens[tokens.Length - 1];
+                }
+                return string.Empty;
+            }
+        }
+    }
+}



More information about the mapguide-commits mailing list