[mapguide-commits] r6941 - in trunk/Tools/Maestro/Maestro.Editors: . Common
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Mon Aug 20 05:57:10 PDT 2012
Author: jng
Date: 2012-08-20 05:57:10 -0700 (Mon, 20 Aug 2012)
New Revision: 6941
Added:
trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryTreeModel.cs
trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryView.Designer.cs
trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryView.cs
trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryView.resx
Modified:
trunk/Tools/Maestro/Maestro.Editors/Common/ResourcePicker.Designer.cs
trunk/Tools/Maestro/Maestro.Editors/Common/ResourcePicker.cs
trunk/Tools/Maestro/Maestro.Editors/Common/ResourcePicker.resx
trunk/Tools/Maestro/Maestro.Editors/Maestro.Editors.csproj
Log:
#2095: Refactor out repository browsing functionality of the ResourcePicker into its own separate class (RepositoryView)
Added: trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryTreeModel.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryTreeModel.cs (rev 0)
+++ trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryTreeModel.cs 2012-08-20 12:57:10 UTC (rev 6941)
@@ -0,0 +1,253 @@
+#region Disclaimer / License
+// Copyright (C) 2012, 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.Linq;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.MaestroAPI.Services;
+using OSGeo.MapGuide.ObjectModels.Common;
+using System.Drawing;
+using OSGeo.MapGuide.MaestroAPI;
+
+namespace Maestro.Editors.Common
+{
+ class DummyNode : TreeNode
+ {
+
+ }
+
+ internal class RepositoryModelItem
+ {
+ private IRepositoryItem _item;
+
+ public RepositoryModelItem(IRepositoryItem item)
+ {
+ _item = item;
+ if (this.IsRoot)
+ {
+ this.ImageIndex = RepositoryIcons.RES_ROOT;
+ }
+ else
+ {
+ if (this.IsFolder)
+ this.ImageIndex = RepositoryIcons.RES_FOLDER;
+ else
+ this.ImageIndex = RepositoryIcons.GetImageIndexForResourceType(_item.ResourceType);
+ }
+ }
+
+ public int ImageIndex { get; private set; }
+
+ public string Name { get { return _item.Name; } }
+
+ public string ResourceId { get { return _item.ResourceId; } }
+
+ public bool HasChildren { get { return _item.HasChildren; } }
+
+ public bool IsFolder
+ {
+ get { return _item.IsFolder; }
+ }
+
+ public bool IsRoot
+ {
+ get { return this.ResourceId == "Library://"; }
+ }
+
+ public IRepositoryItem Instance { get { return _item; } }
+ }
+
+ internal class RepositoryFolderTreeModel
+ {
+ internal event EventHandler ItemSelected;
+
+ private IResourceService _resSvc;
+ private TreeView _tree;
+
+ public RepositoryModelItem SelectedItem
+ {
+ get;
+ private set;
+ }
+
+ private void StartUpdate()
+ {
+ _tree.BeginUpdate();
+ _tree.Cursor = Cursors.WaitCursor;
+ }
+
+ private void EndUpdate()
+ {
+ _tree.EndUpdate();
+ _tree.Cursor = Cursors.Default;
+ }
+
+ private bool _bFoldersOnly;
+
+ public bool FoldersOnly { get { return _bFoldersOnly; } }
+
+ public RepositoryFolderTreeModel(IResourceService resSvc, TreeView tree, bool bFoldersOnly)
+ {
+ _resSvc = resSvc;
+ _tree = tree;
+ _bFoldersOnly = bFoldersOnly;
+
+ _tree.AfterExpand += new TreeViewEventHandler(OnNodeAfterExpand);
+ _tree.AfterSelect += new TreeViewEventHandler(OnNodeAfterSelect);
+
+ _tree.Nodes.Clear();
+ StartUpdate();
+ foreach (RepositoryModelItem folder in GetChildren(null))
+ {
+ var node = CreateNode(folder);
+ _tree.Nodes.Add(node);
+ }
+ EndUpdate();
+ }
+
+ void OnNodeAfterSelect(object sender, TreeViewEventArgs e)
+ {
+ RepositoryModelItem item = (RepositoryModelItem)e.Node.Tag;
+ SetSelectedItem(item);
+ }
+
+ private void SetSelectedItem(RepositoryModelItem item)
+ {
+ this.SelectedItem = item;
+ var handler = this.ItemSelected;
+ if (handler != null)
+ handler(this, EventArgs.Empty);
+ }
+
+ bool IsNodeNotPopulated(TreeNode node)
+ {
+ return node.Nodes.Count == 1 && node.Nodes[0].GetType() == typeof(DummyNode);
+ }
+
+ void OnNodeAfterExpand(object sender, TreeViewEventArgs e)
+ {
+ UpdateNode(e.Node);
+ }
+
+ private void UpdateNode(TreeNode nodeToUpdate)
+ {
+ RepositoryModelItem folder = (RepositoryModelItem)nodeToUpdate.Tag;
+ if (IsNodeNotPopulated(nodeToUpdate))
+ nodeToUpdate.Nodes.Clear();
+
+ if (folder.HasChildren && nodeToUpdate.Nodes.Count == 0)
+ {
+ StartUpdate();
+ foreach (RepositoryModelItem f in GetChildren(folder))
+ {
+ var node = CreateNode(f);
+ nodeToUpdate.Nodes.Add(node);
+ }
+ EndUpdate();
+ }
+ }
+
+ private static TreeNode CreateNode(RepositoryModelItem item)
+ {
+ var node = new TreeNode();
+ node.Name = item.Name;
+ node.Text = item.Name;
+ node.Tag = item;
+ node.ImageIndex = node.SelectedImageIndex = item.IsRoot ? RepositoryIcons.RES_ROOT : RepositoryIcons.RES_FOLDER;
+ node.Nodes.Add(new DummyNode());
+ return node;
+ }
+
+ private System.Collections.IEnumerable GetSorted(ResourceList list)
+ {
+ //Sort them before returning them
+ SortedList<string, RepositoryModelItem> folders = new SortedList<string, RepositoryModelItem>();
+ foreach (var item in list.Children)
+ {
+ if (item.IsFolder)
+ folders.Add(item.Name, new RepositoryModelItem(item));
+ }
+ foreach (var folder in folders.Values)
+ {
+ yield return folder;
+ }
+ }
+
+ public System.Collections.IEnumerable GetChildren(RepositoryModelItem item)
+ {
+ if (item == null)
+ {
+ var list = _resSvc.GetRepositoryResources("Library://", 0);
+ return GetSorted(list);
+ }
+ else
+ {
+ if (item.HasChildren)
+ {
+ var list = _resSvc.GetRepositoryResources(item.ResourceId, _bFoldersOnly ? ResourceTypes.Folder.ToString() : "", 1, true);
+ return GetSorted(list);
+ }
+ else
+ {
+ return new RepositoryModelItem[0];
+ }
+ }
+ }
+
+ internal void NavigateTo(string folderId)
+ {
+ NavigateTo(folderId, null);
+ }
+
+ internal void NavigateTo(string folderId, TreeNode currentNode)
+ {
+ TreeNodeCollection nodeList = null;
+
+ if (currentNode == null)
+ {
+ nodeList = _tree.Nodes;
+ }
+ else
+ {
+ var item = (RepositoryModelItem)currentNode.Tag;
+ if (folderId.Equals(item.ResourceId))
+ {
+ _tree.SelectedNode = currentNode;
+ SetSelectedItem(item);
+ return;
+ }
+ nodeList = currentNode.Nodes;
+ }
+
+ foreach (TreeNode node in nodeList)
+ {
+ var folder = (RepositoryModelItem)node.Tag;
+ if (folderId.StartsWith(folder.ResourceId))
+ {
+ UpdateNode(node);
+ node.Expand();
+ NavigateTo(folderId, node);
+ break;
+ }
+ }
+ }
+ }
+}
Added: trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryView.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryView.Designer.cs (rev 0)
+++ trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryView.Designer.cs 2012-08-20 12:57:10 UTC (rev 6941)
@@ -0,0 +1,68 @@
+namespace Maestro.Editors.Common
+{
+ partial class RepositoryView
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.trvRepository = new System.Windows.Forms.TreeView();
+ this.resImageList = new System.Windows.Forms.ImageList(this.components);
+ this.SuspendLayout();
+ //
+ // trvRepository
+ //
+ this.trvRepository.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.trvRepository.ImageIndex = 0;
+ this.trvRepository.ImageList = this.resImageList;
+ this.trvRepository.Location = new System.Drawing.Point(0, 0);
+ this.trvRepository.Name = "trvRepository";
+ this.trvRepository.SelectedImageIndex = 0;
+ this.trvRepository.Size = new System.Drawing.Size(150, 150);
+ this.trvRepository.TabIndex = 0;
+ //
+ // resImageList
+ //
+ this.resImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+ this.resImageList.ImageSize = new System.Drawing.Size(16, 16);
+ this.resImageList.TransparentColor = System.Drawing.Color.Transparent;
+ //
+ // RepositoryView
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.trvRepository);
+ this.Name = "RepositoryView";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TreeView trvRepository;
+ private System.Windows.Forms.ImageList resImageList;
+ }
+}
Added: trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryView.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryView.cs (rev 0)
+++ trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryView.cs 2012-08-20 12:57:10 UTC (rev 6941)
@@ -0,0 +1,88 @@
+#region Disclaimer / License
+// Copyright (C) 2012, 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.Linq;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.ObjectModels.Common;
+using OSGeo.MapGuide.MaestroAPI.Services;
+
+namespace Maestro.Editors.Common
+{
+ public partial class RepositoryView : UserControl
+ {
+ public RepositoryView()
+ {
+ InitializeComponent();
+ }
+
+ protected override void OnLoad(EventArgs e)
+ {
+ base.OnLoad(e);
+ RepositoryIcons.PopulateImageList(resImageList);
+ }
+
+ public void NavigateTo(string folderId)
+ {
+ if (_model != null)
+ _model.NavigateTo(folderId);
+ }
+
+ public void Init(IResourceService resSvc, bool bFoldersOnly)
+ {
+ if (_model != null)
+ {
+ _model.ItemSelected -= OnItemSelectedInternal;
+ }
+
+ _model = new RepositoryFolderTreeModel(resSvc, trvRepository, bFoldersOnly);
+ _model.ItemSelected += OnItemSelectedInternal;
+ }
+
+ void OnItemSelectedInternal(object sender, EventArgs e)
+ {
+ var h = this.ItemSelected;
+ if (h != null)
+ h(this, EventArgs.Empty);
+ }
+
+ private RepositoryFolderTreeModel _model;
+
+ public IRepositoryItem SelectedItem
+ {
+ get
+ {
+ if (_model != null)
+ {
+ var it = _model.SelectedItem;
+ if (it != null)
+ return it.Instance;
+ }
+ return null;
+ }
+ }
+
+ public event EventHandler ItemSelected;
+ }
+}
Added: trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryView.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryView.resx (rev 0)
+++ trunk/Tools/Maestro/Maestro.Editors/Common/RepositoryView.resx 2012-08-20 12:57:10 UTC (rev 6941)
@@ -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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <metadata name="resImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+</root>
\ No newline at end of file
Modified: trunk/Tools/Maestro/Maestro.Editors/Common/ResourcePicker.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Common/ResourcePicker.Designer.cs 2012-08-20 11:43:34 UTC (rev 6940)
+++ trunk/Tools/Maestro/Maestro.Editors/Common/ResourcePicker.Designer.cs 2012-08-20 12:57:10 UTC (rev 6941)
@@ -43,13 +43,13 @@
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
- this.trvFolders = new System.Windows.Forms.TreeView();
this.folderImageList = new System.Windows.Forms.ImageList(this.components);
this.label2 = new System.Windows.Forms.Label();
this.txtFolder = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.txtName = new System.Windows.Forms.TextBox();
this.resIdComponentPanel = new System.Windows.Forms.Panel();
+ this.repoView = new Maestro.Editors.Common.RepositoryView();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
@@ -145,7 +145,7 @@
//
// splitContainer1.Panel1
//
- this.splitContainer1.Panel1.Controls.Add(this.trvFolders);
+ this.splitContainer1.Panel1.Controls.Add(this.repoView);
this.splitContainer1.Panel1.Controls.Add(this.label3);
//
// splitContainer1.Panel2
@@ -153,12 +153,6 @@
this.splitContainer1.Panel2.Controls.Add(this.lstResources);
this.splitContainer1.Panel2.Controls.Add(this.label4);
//
- // trvFolders
- //
- resources.ApplyResources(this.trvFolders, "trvFolders");
- this.trvFolders.ImageList = this.folderImageList;
- this.trvFolders.Name = "trvFolders";
- //
// folderImageList
//
this.folderImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
@@ -197,6 +191,11 @@
this.resIdComponentPanel.Controls.Add(this.txtFolder);
this.resIdComponentPanel.Name = "resIdComponentPanel";
//
+ // repoView
+ //
+ resources.ApplyResources(this.repoView, "repoView");
+ this.repoView.Name = "repoView";
+ //
// ResourcePicker
//
this.AcceptButton = this.btnOK;
@@ -246,7 +245,7 @@
private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox txtName;
private System.Windows.Forms.Panel resIdComponentPanel;
- private System.Windows.Forms.TreeView trvFolders;
private System.Windows.Forms.ImageList folderImageList;
+ private Common.RepositoryView repoView;
}
}
\ No newline at end of file
Modified: trunk/Tools/Maestro/Maestro.Editors/Common/ResourcePicker.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Common/ResourcePicker.cs 2012-08-20 11:43:34 UTC (rev 6940)
+++ trunk/Tools/Maestro/Maestro.Editors/Common/ResourcePicker.cs 2012-08-20 12:57:10 UTC (rev 6941)
@@ -30,6 +30,7 @@
using OSGeo.MapGuide.ObjectModels.Common;
using System.Security.AccessControl;
using OSGeo.MapGuide.MaestroAPI.Resource;
+using Maestro.Editors.Common;
namespace Maestro.Editors.Generic
{
@@ -67,8 +68,6 @@
private bool _resourceMode = false;
- private RepositoryFolderTreeModel _model;
-
/// <summary>
/// Constructs a new instance. Use this overload to select any resource type. If only
/// folder selection is desired, set <see cref="SelectFoldersOnly"/> to true before
@@ -80,8 +79,8 @@
: this()
{
_resSvc = resSvc;
- _model = new RepositoryFolderTreeModel(_resSvc, trvFolders);
- _model.FolderSelected += OnFolderSelected;
+ repoView.Init(resSvc, true);
+ repoView.ItemSelected += OnFolderSelected;
this.UseFilter = true;
this.Mode = mode;
SetStartingPoint(LastSelectedFolder.FolderId);
@@ -108,8 +107,8 @@
if (!_resSvc.ResourceExists(folderId))
folderId = "Library://";
- this.ActiveControl = trvFolders;
- _model.NavigateTo(folderId);
+ this.ActiveControl = repoView;
+ repoView.NavigateTo(folderId);
this.SelectedFolder = folderId;
//HACK: Navigating to the specified folder takes away the focus to the
@@ -309,24 +308,21 @@
}
private void UpdateDocumentList()
- {
- if (_model != null)
+ {
+ IRepositoryItem folder = repoView.SelectedItem;
+ if (folder != null)
{
- RepositoryFolder folder = _model.SelectedFolder;
- if (folder != null)
+ txtFolder.Text = folder.ResourceId;
+
+ if (!this.SelectFoldersOnly)
{
- txtFolder.Text = folder.ResourceId;
+ ResourceList list = null;
+ if (!this.UseFilter)
+ list = _resSvc.GetRepositoryResources(folder.ResourceId, 1);
+ else
+ list = _resSvc.GetRepositoryResources(folder.ResourceId, this.Filter.ToString(), 1);
- if (!this.SelectFoldersOnly)
- {
- ResourceList list = null;
- if (!this.UseFilter)
- list = _resSvc.GetRepositoryResources(folder.ResourceId, 1);
- else
- list = _resSvc.GetRepositoryResources(folder.ResourceId, this.Filter.ToString(), 1);
-
- PopulateDocumentList(list);
- }
+ PopulateDocumentList(list);
}
}
}
@@ -425,215 +421,4 @@
/// </summary>
OpenFolder
}
-
- internal class RepositoryFolder
- {
- private IRepositoryItem _item;
-
- public RepositoryFolder(IRepositoryItem item)
- {
- _item = item;
- }
-
- public string Name { get { return _item.Name; } }
-
- public string ResourceId { get { return _item.ResourceId; } }
-
- public bool HasChildren { get { return _item.HasChildren; } }
-
- public Image Icon
- {
- get
- {
- if (IsRoot)
- {
- return Properties.Resources.server;
- }
- else
- {
- return Properties.Resources.folder_horizontal;
- }
- }
- }
-
- public bool IsRoot
- {
- get { return this.ResourceId == "Library://"; }
- }
- }
-
- internal class RepositoryFolderTreeModel
- {
- class DummyNode : TreeNode
- {
-
- }
-
- internal event EventHandler FolderSelected;
-
- private IResourceService _resSvc;
- private TreeView _tree;
-
- public RepositoryFolder SelectedFolder
- {
- get;
- private set;
- }
-
- private void StartUpdate()
- {
- _tree.BeginUpdate();
- _tree.Cursor = Cursors.WaitCursor;
- }
-
- private void EndUpdate()
- {
- _tree.EndUpdate();
- _tree.Cursor = Cursors.Default;
- }
-
- public RepositoryFolderTreeModel(IResourceService resSvc, TreeView tree)
- {
- _resSvc = resSvc;
- _tree = tree;
-
- _tree.AfterExpand += new TreeViewEventHandler(OnNodeAfterExpand);
- _tree.AfterSelect += new TreeViewEventHandler(OnNodeAfterSelect);
-
- StartUpdate();
- foreach (RepositoryFolder folder in GetChildren(null))
- {
- var node = CreateNode(folder);
- _tree.Nodes.Add(node);
- }
- EndUpdate();
- }
-
- void OnNodeAfterSelect(object sender, TreeViewEventArgs e)
- {
- RepositoryFolder folder = (RepositoryFolder)e.Node.Tag;
- SetSelectedFolder(folder);
- }
-
- private void SetSelectedFolder(RepositoryFolder folder)
- {
- this.SelectedFolder = folder;
- var handler = this.FolderSelected;
- if (handler != null)
- handler(this, EventArgs.Empty);
- }
-
- bool IsNodeNotPopulated(TreeNode node)
- {
- return node.Nodes.Count == 1 && node.Nodes[0].GetType() == typeof(DummyNode);
- }
-
- void OnNodeAfterExpand(object sender, TreeViewEventArgs e)
- {
- UpdateNode(e.Node);
- }
-
- private void UpdateNode(TreeNode nodeToUpdate)
- {
- RepositoryFolder folder = (RepositoryFolder)nodeToUpdate.Tag;
- if (IsNodeNotPopulated(nodeToUpdate))
- nodeToUpdate.Nodes.Clear();
-
- if (folder.HasChildren && nodeToUpdate.Nodes.Count == 0)
- {
- StartUpdate();
- foreach (RepositoryFolder f in GetChildren(folder))
- {
- var node = CreateNode(f);
- nodeToUpdate.Nodes.Add(node);
- }
- EndUpdate();
- }
- }
-
- private static TreeNode CreateNode(RepositoryFolder folder)
- {
- var node = new TreeNode();
- node.Name = folder.Name;
- node.Text = folder.Name;
- node.Tag = folder;
- node.ImageIndex = node.SelectedImageIndex = folder.IsRoot ? RepositoryIcons.RES_ROOT : RepositoryIcons.RES_FOLDER;
- node.Nodes.Add(new DummyNode());
- return node;
- }
-
- private System.Collections.IEnumerable GetSorted(ResourceList list)
- {
- //Sort them before returning them
- SortedList<string, RepositoryFolder> folders = new SortedList<string, RepositoryFolder>();
- foreach (var item in list.Children)
- {
- if (item.IsFolder)
- folders.Add(item.Name, new RepositoryFolder(item));
- }
- foreach (var folder in folders.Values)
- {
- yield return folder;
- }
- }
-
- public System.Collections.IEnumerable GetChildren(RepositoryFolder folder)
- {
- if (folder == null)
- {
- var list = _resSvc.GetRepositoryResources("Library://", 0);
- return GetSorted(list);
- }
- else
- {
- if (folder.HasChildren)
- {
- var list = _resSvc.GetRepositoryResources(folder.ResourceId, ResourceTypes.Folder.ToString(), 1, true);
- return GetSorted(list);
- }
- else
- {
- return new RepositoryFolder[0];
- }
- }
- }
-
- internal void NavigateTo(string folderId)
- {
- NavigateTo(folderId, null);
- }
-
- internal void NavigateTo(string folderId, TreeNode currentNode)
- {
- TreeNodeCollection nodeList = null;
-
- if (currentNode == null)
- {
- nodeList = _tree.Nodes;
- }
- else
- {
- var folder = (RepositoryFolder)currentNode.Tag;
- if (folderId.Equals(folder.ResourceId))
- {
- _tree.SelectedNode = currentNode;
- SetSelectedFolder(folder);
- return;
- }
- nodeList = currentNode.Nodes;
- }
-
- foreach (TreeNode node in nodeList)
- {
- var folder = (RepositoryFolder)node.Tag;
- if (folderId.StartsWith(folder.ResourceId))
- {
- UpdateNode(node);
- node.Expand();
- NavigateTo(folderId, node);
- break;
- }
- }
- }
- }
}
Modified: trunk/Tools/Maestro/Maestro.Editors/Common/ResourcePicker.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Common/ResourcePicker.resx 2012-08-20 11:43:34 UTC (rev 6940)
+++ trunk/Tools/Maestro/Maestro.Editors/Common/ResourcePicker.resx 2012-08-20 12:57:10 UTC (rev 6941)
@@ -375,40 +375,28 @@
<data name="splitContainer1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
- <data name="trvFolders.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+ <data name="repoView.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
- <data name="trvFolders.ImageIndex" type="System.Int32, mscorlib">
- <value>0</value>
- </data>
- <metadata name="folderImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>137, 17</value>
- </metadata>
- <data name="folderImageList.ImageSize" type="System.Drawing.Size, System.Drawing">
- <value>16, 16</value>
- </data>
- <data name="trvFolders.Location" type="System.Drawing.Point, System.Drawing">
+ <data name="repoView.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 31</value>
</data>
- <data name="trvFolders.SelectedImageIndex" type="System.Int32, mscorlib">
- <value>0</value>
- </data>
- <data name="trvFolders.Size" type="System.Drawing.Size, System.Drawing">
+ <data name="repoView.Size" type="System.Drawing.Size, System.Drawing">
<value>178, 298</value>
</data>
- <data name="trvFolders.TabIndex" type="System.Int32, mscorlib">
- <value>0</value>
+ <data name="repoView.TabIndex" type="System.Int32, mscorlib">
+ <value>2</value>
</data>
- <data name=">>trvFolders.Name" xml:space="preserve">
- <value>trvFolders</value>
+ <data name=">>repoView.Name" xml:space="preserve">
+ <value>repoView</value>
</data>
- <data name=">>trvFolders.Type" xml:space="preserve">
- <value>System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ <data name=">>repoView.Type" xml:space="preserve">
+ <value>Maestro.Editors.Common.RepositoryView, Maestro.Editors, Version=5.0.0.6640, Culture=neutral, PublicKeyToken=f526c48929fda856</value>
</data>
- <data name=">>trvFolders.Parent" xml:space="preserve">
+ <data name=">>repoView.Parent" xml:space="preserve">
<value>splitContainer1.Panel1</value>
</data>
- <data name=">>trvFolders.ZOrder" xml:space="preserve">
+ <data name=">>repoView.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name=">>splitContainer1.Panel1.Name" xml:space="preserve">
@@ -456,6 +444,12 @@
<data name=">>splitContainer1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
+ <metadata name="folderImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>137, 17</value>
+ </metadata>
+ <data name="folderImageList.ImageSize" type="System.Drawing.Size, System.Drawing">
+ <value>16, 16</value>
+ </data>
<data name="label2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
Modified: trunk/Tools/Maestro/Maestro.Editors/Maestro.Editors.csproj
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Maestro.Editors.csproj 2012-08-20 11:43:34 UTC (rev 6940)
+++ trunk/Tools/Maestro/Maestro.Editors/Maestro.Editors.csproj 2012-08-20 12:57:10 UTC (rev 6941)
@@ -127,6 +127,13 @@
<DependentUpon>GenericItemSelectionDialog.cs</DependentUpon>
</Compile>
<Compile Include="Common\NsDoc.cs" />
+ <Compile Include="Common\RepositoryTreeModel.cs" />
+ <Compile Include="Common\RepositoryView.cs">
+ <SubType>UserControl</SubType>
+ </Compile>
+ <Compile Include="Common\RepositoryView.Designer.cs">
+ <DependentUpon>RepositoryView.cs</DependentUpon>
+ </Compile>
<Compile Include="Common\ResourceDataCtrl.cs">
<SubType>UserControl</SubType>
</Compile>
@@ -1282,6 +1289,9 @@
<EmbeddedResource Include="Common\GenericItemSelectionDialog.resx">
<DependentUpon>GenericItemSelectionDialog.cs</DependentUpon>
</EmbeddedResource>
+ <EmbeddedResource Include="Common\RepositoryView.resx">
+ <DependentUpon>RepositoryView.cs</DependentUpon>
+ </EmbeddedResource>
<EmbeddedResource Include="Common\ResourceDataCtrl.resx">
<DependentUpon>ResourceDataCtrl.cs</DependentUpon>
<SubType>Designer</SubType>
More information about the mapguide-commits
mailing list