#if FRAMEWORK20 using System; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; using DevComponents.DotNetBar; using DevComponents.DotNetBar.Design; using System.ComponentModel.Design; using System.Drawing.Imaging; using DevComponents.DotNetBar.Rendering; using DevComponents.AdvTree; using System.Windows.Forms.Design; using System.Reflection; namespace DevComponents.DotNetBar.Design { internal class CrumbBarItemsEditor : UserControl { #region Private Variables private DevComponents.AdvTree.AdvTree advTree1; private DevComponents.AdvTree.Node node1; private DevComponents.DotNetBar.ElementStyle elementStyle1; private DevComponents.DotNetBar.ButtonX buttonAddItem; private DevComponents.AdvTree.ColumnHeader columnHeader1; private DevComponents.AdvTree.ColumnHeader columnHeader2; private DevComponents.DotNetBar.ButtonX buttonRemoveItem; private System.Windows.Forms.PropertyGrid propertyGrid1; internal DevComponents.DotNetBar.ButtonX buttonX1; private CrumbBar _CrumbBar = null; private Label label1; private CrumbBarDesigner _Designer = null; #endregion #region Constructors public CrumbBarItemsEditor() { InitializeComponent(); #if (!TRIAL) this.advTree1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F"; #endif } /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #endregion #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.propertyGrid1 = new System.Windows.Forms.PropertyGrid(); this.buttonX1 = new DevComponents.DotNetBar.ButtonX(); this.buttonRemoveItem = new DevComponents.DotNetBar.ButtonX(); this.buttonAddItem = new DevComponents.DotNetBar.ButtonX(); this.advTree1 = new DevComponents.AdvTree.AdvTree(); this.columnHeader1 = new DevComponents.AdvTree.ColumnHeader(); this.columnHeader2 = new DevComponents.AdvTree.ColumnHeader(); this.node1 = new DevComponents.AdvTree.Node(); this.elementStyle1 = new DevComponents.DotNetBar.ElementStyle(); this.label1 = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.advTree1)).BeginInit(); this.SuspendLayout(); // // propertyGrid1 // this.propertyGrid1.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.propertyGrid1.Location = new System.Drawing.Point(300, 3); this.propertyGrid1.Name = "propertyGrid1"; this.propertyGrid1.Size = new System.Drawing.Size(284, 331); this.propertyGrid1.TabIndex = 4; this.propertyGrid1.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.propertyGrid1_PropertyValueChanged); // // buttonX1 // this.buttonX1.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; this.buttonX1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonX1.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; this.buttonX1.Location = new System.Drawing.Point(515, 341); this.buttonX1.Name = "buttonX1"; this.buttonX1.Shape = new DevComponents.DotNetBar.RoundRectangleShapeDescriptor(); this.buttonX1.Size = new System.Drawing.Size(69, 24); this.buttonX1.TabIndex = 5; this.buttonX1.Text = "&Close"; this.buttonX1.Click += new System.EventHandler(this.buttonX1_Click); // // buttonRemoveItem // this.buttonRemoveItem.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; this.buttonRemoveItem.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.buttonRemoveItem.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; this.buttonRemoveItem.Enabled = false; this.buttonRemoveItem.FocusCuesEnabled = false; this.buttonRemoveItem.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.buttonRemoveItem.Location = new System.Drawing.Point(32, 341); this.buttonRemoveItem.Name = "buttonRemoveItem"; this.buttonRemoveItem.Shape = new DevComponents.DotNetBar.RoundRectangleShapeDescriptor(); this.buttonRemoveItem.Size = new System.Drawing.Size(24, 24); this.buttonRemoveItem.TabIndex = 3; this.buttonRemoveItem.Click += new System.EventHandler(this.buttonRemoveItem_Click); // // buttonAddItem // this.buttonAddItem.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; this.buttonAddItem.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.buttonAddItem.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; this.buttonAddItem.FocusCuesEnabled = false; this.buttonAddItem.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.buttonAddItem.Location = new System.Drawing.Point(4, 341); this.buttonAddItem.Name = "buttonAddItem"; this.buttonAddItem.Shape = new DevComponents.DotNetBar.RoundRectangleShapeDescriptor(); this.buttonAddItem.Size = new System.Drawing.Size(24, 24); this.buttonAddItem.TabIndex = 1; this.buttonAddItem.Click += new System.EventHandler(this.buttonAddItem_Click); // // advTree1 // this.advTree1.AccessibleRole = System.Windows.Forms.AccessibleRole.Outline; this.advTree1.AllowDrop = true; this.advTree1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); this.advTree1.BackColor = System.Drawing.SystemColors.Window; // // // this.advTree1.BackgroundStyle.Class = "TreeBorderKey"; this.advTree1.Columns.Add(this.columnHeader1); this.advTree1.Columns.Add(this.columnHeader2); this.advTree1.ExpandButtonType = DevComponents.AdvTree.eExpandButtonType.Triangle; this.advTree1.ExpandWidth = 18; this.advTree1.Location = new System.Drawing.Point(3, 3); this.advTree1.Name = "advTree1"; this.advTree1.Nodes.AddRange(new DevComponents.AdvTree.Node[] { this.node1}); this.advTree1.NodeStyle = this.elementStyle1; this.advTree1.PathSeparator = ";"; this.advTree1.SelectionBoxStyle = DevComponents.AdvTree.eSelectionStyle.FullRowSelect; this.advTree1.Size = new System.Drawing.Size(291, 332); this.advTree1.Styles.Add(this.elementStyle1); this.advTree1.SuspendPaint = false; this.advTree1.TabIndex = 0; this.advTree1.Text = "advTree1"; this.advTree1.AfterNodeDrop += new DevComponents.AdvTree.TreeDragDropEventHandler(this.advTree1_AfterNodeDrop); this.advTree1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.advTree1_MouseUp); this.advTree1.AfterNodeSelect += new DevComponents.AdvTree.AdvTreeNodeEventHandler(this.advTree1_AfterNodeSelect); // // columnHeader1 // this.columnHeader1.Name = "columnHeader1"; this.columnHeader1.Text = "Text"; this.columnHeader1.Width.Relative = 70; // // columnHeader2 // this.columnHeader2.Name = "columnHeader2"; this.columnHeader2.Text = "Name"; this.columnHeader2.Width.Relative = 30; // // node1 // this.node1.Expanded = true; this.node1.Name = "node1"; this.node1.Text = "node1"; // // elementStyle1 // this.elementStyle1.Name = "elementStyle1"; this.elementStyle1.TextColor = System.Drawing.SystemColors.ControlText; // // label1 // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(153, 352); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(141, 13); this.label1.TabIndex = 6; this.label1.Text = "Drag && drop items to re-order"; this.label1.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; // // CrumbBarItemsEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = Color.White; this.Controls.Add(this.label1); this.Controls.Add(this.buttonX1); this.Controls.Add(this.propertyGrid1); this.Controls.Add(this.buttonRemoveItem); this.Controls.Add(this.buttonAddItem); this.Controls.Add(this.advTree1); this.Name = "CrumbBarItemsEditor"; this.Size = new System.Drawing.Size(587, 373); this.Load += new System.EventHandler(this.CrumbBarItemsEditor_Load); ((System.ComponentModel.ISupportInitialize)(this.advTree1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); } #endregion #region Internal Implementation private object GetDesignService(Type serviceType) { if (_Designer != null) { return _Designer.GetDesignService(serviceType); } return null; } private CrumbBarItem CreateItem() { IDesignerHost dh = (IDesignerHost)GetDesignService(typeof(IDesignerHost)); if (dh == null) return null; CrumbBarItem item = (CrumbBarItem)dh.CreateComponent(typeof(CrumbBarItem)); item.Text = item.Name; return item; } private void AddNewItem() { AddNewItem(null); } private void AddNewItem(CrumbBarItem parent) { IDesignerHost dh = (IDesignerHost)GetDesignService(typeof(IDesignerHost)); DesignerTransaction dt = null; if (dh != null) { dt = dh.CreateTransaction("New CrumbBarItem"); } bool isEmpty = advTree1.Nodes.Count == 0; CrumbBarItem item = CreateItem(); if (item == null) return; IComponentChangeService cc = GetDesignService(typeof(IComponentChangeService)) as IComponentChangeService; if (cc != null) { if (parent == null) cc.OnComponentChanging(_CrumbBar, TypeDescriptor.GetProperties(_CrumbBar)["Items"]); else cc.OnComponentChanging(parent, TypeDescriptor.GetProperties(parent)["SubItems"]); } if (parent == null) _CrumbBar.Items.Add(item); else parent.SubItems.Add(item); if (cc != null) { if (parent == null) cc.OnComponentChanged(_CrumbBar, TypeDescriptor.GetProperties(_CrumbBar)["Items"], null, null); else cc.OnComponentChanged(parent, TypeDescriptor.GetProperties(parent)["SubItems"], null, null); } if (dt != null) dt.Commit(); if (parent == null) advTree1.Nodes.Add(CreateNodeForItem(item)); else { advTree1.SelectedNode.Nodes.Add(CreateNodeForItem(item)); advTree1.SelectedNode.Expand(); } if (isEmpty && advTree1.SelectedNode == null && advTree1.Nodes.Count > 0) advTree1.SelectedNode = advTree1.Nodes[0]; } #endregion private void CrumbBarItemsEditor_Load(object sender, EventArgs e) { Bitmap img = new Bitmap(16, 16, PixelFormat.Format32bppArgb); Color c = Color.DarkGray; if (GlobalManager.Renderer is Office2007Renderer) c = ((Office2007Renderer)GlobalManager.Renderer).ColorTable.CheckBoxItem.Default.Text; using (Graphics g = Graphics.FromImage(img)) { using (Brush brush = new SolidBrush(c)) { g.FillRectangle(brush, 7, 2, 3, 13); g.FillRectangle(brush, 2, 7, 13, 3); } } buttonAddItem.Image = img; img = new Bitmap(16, 16, PixelFormat.Format32bppArgb); using (Graphics g = Graphics.FromImage(img)) { using (Brush brush = new SolidBrush(c)) { g.FillRectangle(brush, 2, 7, 13, 3); } } buttonRemoveItem.Image = img; #if (FRAMEWORK20) IUIService service = GetDesignService(typeof(IUIService)) as IUIService; if (service != null) { PropertyInfo pi = propertyGrid1.GetType().GetProperty("ToolStripRenderer", System.Reflection.BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); if (pi != null) { pi.SetValue(propertyGrid1, (ToolStripProfessionalRenderer)service.Styles["VsToolWindowRenderer"], null); } } #endif } private void advTree1_MouseUp(object sender, MouseEventArgs e) { Node node = advTree1.GetNodeAt(e.Y); if (node == null) advTree1.SelectedNode = null; } internal void UpdateDisplay() { advTree1.Nodes.Clear(); if (_CrumbBar == null) return; advTree1.BeginUpdate(); foreach (CrumbBarItem item in _CrumbBar.Items) { Node node = CreateNodeForItem(item); advTree1.Nodes.Add(node); LoadSubItems(node, item); } advTree1.EndUpdate(); } private void LoadSubItems(Node parent, CrumbBarItem item) { foreach (BaseItem o in item.SubItems) { if (o is CrumbBarItem) { CrumbBarItem cb = (CrumbBarItem)o; Node node = CreateNodeForItem(cb); parent.Nodes.Add(node); LoadSubItems(node, cb); } } } private Node CreateNodeForItem(CrumbBarItem item) { Node node = new Node(); node.Expanded = true; node.Tag = item; node.Text = item.Text; node.Image = item.GetItemImage(); node.Cells.Add(new Cell(item.Name)); return node; } public CrumbBarDesigner Designer { get { return _Designer; } set { _Designer = value; if(_Designer!=null) this.propertyGrid1.Site = new PropertyGridSite((IServiceProvider)_Designer.Component.Site, this.propertyGrid1); } } public CrumbBar CrumbBar { get { return _CrumbBar; } set { if (value != _CrumbBar) { CrumbBar oldValue = _CrumbBar; _CrumbBar = value; OnCrumbBarChanged(oldValue, value); } } } private void OnCrumbBarChanged(CrumbBar oldValue, CrumbBar newValue) { UpdateDisplay(); } private void buttonAddItem_Click(object sender, EventArgs e) { CrumbBarItem parent = null; if (advTree1.SelectedNode != null) parent = advTree1.SelectedNode.Tag as CrumbBarItem; AddNewItem(parent); } private void buttonRemoveItem_Click(object sender, EventArgs e) { if (advTree1.SelectedNode == null) return; CrumbBarItem item = advTree1.SelectedNode.Tag as CrumbBarItem; if (item == null) return; advTree1.SelectedNode.Remove(); DeleteItem(item); } private void DeleteItem(CrumbBarItem item) { IDesignerHost dh = (IDesignerHost)GetDesignService(typeof(IDesignerHost)); if (dh == null) return; dh.DestroyComponent(item); } private void advTree1_AfterNodeSelect(object sender, AdvTreeNodeEventArgs e) { buttonRemoveItem.Enabled = e.Node != null; if (e.Node != null) propertyGrid1.SelectedObject = e.Node.Tag; else propertyGrid1.SelectedObject = null; } private void advTree1_AfterNodeDrop(object sender, TreeDragDropEventArgs e) { IDesignerHost dh = (IDesignerHost)GetDesignService(typeof(IDesignerHost)); DesignerTransaction dt = null; if (dh != null) dt = dh.CreateTransaction("Move items"); IComponentChangeService cc = GetDesignService(typeof(IComponentChangeService)) as IComponentChangeService; try { CrumbBarItem movedItem = e.Node.Tag as CrumbBarItem; CrumbBarItem parent = (CrumbBarItem)movedItem.Parent; if (cc != null) { if (parent == null) cc.OnComponentChanging(_CrumbBar, TypeDescriptor.GetProperties(_CrumbBar)["Items"]); else cc.OnComponentChanging(parent, TypeDescriptor.GetProperties(parent)["SubItems"]); } if (parent == null) _CrumbBar.Items.Remove(movedItem); else parent.SubItems.Remove(movedItem); if (cc != null) { if (parent == null) cc.OnComponentChanged(_CrumbBar, TypeDescriptor.GetProperties(_CrumbBar)["Items"], null, null); else cc.OnComponentChanged(parent, TypeDescriptor.GetProperties(parent)["SubItems"], null, null); } if (e.NewParentNode == null) { int index = advTree1.Nodes.IndexOf(e.Node); if (cc != null) cc.OnComponentChanging(_CrumbBar, TypeDescriptor.GetProperties(_CrumbBar)["Items"]); _CrumbBar.Items.Insert(index, movedItem); if (cc != null) cc.OnComponentChanged(_CrumbBar, TypeDescriptor.GetProperties(_CrumbBar)["Items"], null, null); } else { parent = e.NewParentNode.Tag as CrumbBarItem; int index = e.NewParentNode.Nodes.IndexOf(e.Node); if (cc != null) cc.OnComponentChanging(parent, TypeDescriptor.GetProperties(parent)["SubItems"]); parent.SubItems.Insert(index, movedItem); if (cc != null) cc.OnComponentChanged(parent, TypeDescriptor.GetProperties(parent)["SubItems"], null, null); } } catch { if (dt != null) dt.Cancel(); throw; } finally { if (dt != null && !dt.Canceled) dt.Commit(); } } private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) { if (advTree1.SelectedNode == null) return; Node node = advTree1.SelectedNode; CrumbBarItem item = (CrumbBarItem)propertyGrid1.SelectedObject; if (e.ChangedItem.PropertyDescriptor.Name == "Text") { node.Text = item.Text; } else if (e.ChangedItem.PropertyDescriptor.Name == "Image" || e.ChangedItem.PropertyDescriptor.Name=="ImageIndex") { node.Image = item.GetItemImage(); } else if (e.ChangedItem.PropertyDescriptor.Name == "Name") { node.Cells[1].Text = item.Name; } } #region PropertyGridSite internal class PropertyGridSite : ISite, IServiceProvider { // Fields private IComponent comp; private bool inGetService; private IServiceProvider sp; // Methods public PropertyGridSite(IServiceProvider sp, IComponent comp) { this.sp = sp; this.comp = comp; } public object GetService(Type t) { if (!this.inGetService && (this.sp != null)) { try { this.inGetService = true; return this.sp.GetService(t); } finally { this.inGetService = false; } } return null; } // Properties public IComponent Component { get { return this.comp; } } public IContainer Container { get { return null; } } public bool DesignMode { get { return false; } } public string Name { get { return null; } set { } } } #endregion private void buttonX1_Click(object sender, EventArgs e) { Form form = this.FindForm(); if (form != null) form.Close(); } } } #endif