using System; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Data; using System.Windows.Forms; using Emergent.Gamebryo.SceneDesigner.Framework; using Emergent.Gamebryo.SceneDesigner.StdPluginsCs.Utility; namespace Emergent.Gamebryo.SceneDesigner.StdPluginsCs.Controls { /// /// Summary description for PaletteTreeView. /// public class PaletteTreeView : System.Windows.Forms.TreeView { #region Private Data private bool m_bDisplayTemplates; private MPalette[] m_palettes; private MPalette m_selectedPalette; private string m_selectedCategory; #endregion private System.Windows.Forms.ImageList m_ilSmallIcons; private System.ComponentModel.IContainer components; public PaletteTreeView() { // This call is required by the Windows.Forms Form Designer. InitializeComponent(); } public bool DisplayTemplates { get { return m_bDisplayTemplates; } set { m_bDisplayTemplates = value; } } public MPalette[] Palettes { get { return m_palettes; } set { m_palettes = value; RefreshUI(); } } public MPalette SelectedPalette { get { return m_selectedPalette; } set { m_selectedPalette = value; } } public string SelectedCategory { get { return m_selectedCategory; } set { m_selectedCategory = value; } } /// /// Clean up any resources being used. /// protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Component Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(PaletteTreeView)); this.m_ilSmallIcons = new System.Windows.Forms.ImageList(this.components); // // m_ilSmallIcons // this.m_ilSmallIcons.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; this.m_ilSmallIcons.ImageSize = new System.Drawing.Size(16, 16); this.m_ilSmallIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("m_ilSmallIcons.ImageStream"))); this.m_ilSmallIcons.TransparentColor = System.Drawing.Color.Transparent; // // PaletteTreeView // this.ImageIndex = 0; this.ImageList = this.m_ilSmallIcons; this.SelectedImageIndex = 0; this.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.PaletteTreeView_AfterSelect); } #endregion #region Helper Methods private void RefreshUI() { this.BeginUpdate(); this.Nodes.Clear(); if (m_palettes != null) { foreach(MPalette palette in m_palettes) { TreeNode node = Nodes.Add(palette.Name); if (palette == m_selectedPalette && m_selectedCategory.Equals(string.Empty)) { this.SelectedNode = node; } node.ImageIndex = 0; string[] paletteRootCategories = PaletteUtilities.BuildSubcategories(palette, ""); BuildCategoryNodes(node, palette, paletteRootCategories); } } this.EndUpdate(); } private void BuildCategoryNodes(TreeNode parentNode, MPalette palette, string[] categoryNodes) { foreach (string category in categoryNodes) { TreeNode categoryNode = parentNode.Nodes.Add( PaletteUtilities.SimpleName(category)); categoryNode.ImageIndex = 1; categoryNode.SelectedImageIndex = 1; string[] subcategories = PaletteUtilities.BuildSubcategories( palette, category); if (subcategories.Length > 0) { BuildCategoryNodes(categoryNode, palette, subcategories); } if (category.Equals(m_selectedCategory)) { categoryNode.Expand(); this.SelectedNode = categoryNode; } } } #endregion private void PaletteTreeView_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) { //Find root node and build Category List TreeNode topmostNode = e.Node; ArrayList categories = new ArrayList(); while (topmostNode.Parent != null) { categories.Insert(0,topmostNode.Text); topmostNode = topmostNode.Parent; } foreach(MPalette palette in m_palettes) { if (palette.Name.Equals(topmostNode.Text)) { m_selectedPalette = palette; } } string fullCategory = PaletteUtilities.FullCategoryName( categories.ToArray(typeof(string)) as string[]); m_selectedCategory = fullCategory; } } }