/// <summary> /// Remove Item on Tree Node selected. /// </summary> /// <param name="sender">The sender.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> /// <param name="t">The t.</param> private void RemoveItem_Click(object sender, EventArgs e, TreeNode t) { SunModelPart p = Utils.GetTreeNodeClass(t); string s = String.Concat("Please confirm you are deleteing ", p.ToString(), " ", t.Text); using (Confirm c = new Confirm(s)) { Point location = new Point((this.Left + (this.Width / 2)) - c.Width / 2, (this.Top + (this.Height / 2)) - c.Height / 2); c.StartPosition = FormStartPosition.Manual; c.Location = location; var result = c.ShowDialog(); if (result == DialogResult.OK) { if (p == SunModelPart.Measure) { this.cmodel.RemoveMeasure(t.Text, Utils.GetBusinessProcessName(t)); } if (p == SunModelPart.Dimension) { this.cmodel.RemoveDimension(t.Text, Utils.GetBusinessProcessName(t)); } if (p == SunModelPart.Attribute || p == SunModelPart.SharedNodeReference) { this.cmodel.RemoveLevelByUID(t.Name, Utils.GetDimension(t), Utils.GetBusinessProcessName(t)); } if (p == SunModelPart.BusinessProcess) { this.cmodel.RemoveBusinessProcess(t.Text); tabControlArea.TabPages.Remove(tabControlArea.SelectedTab); } else { t.Remove(); } RefreshGraphics(); } } }
/// <summary> /// Handles a NodeMouseClick to the Tree View /// It should dynamically generate a menu if the node is right clicked /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="TreeNodeMouseClickEventArgs"/> instance containing the event data.</param> private void DynTree_AfterSelect(object sender, TreeNodeMouseClickEventArgs e) { // Get the selected node. TreeNode node = e.Node; SunModelPart p = Utils.GetTreeNodeClass((TreeNode)e.Node); UpdatePropertyGrid(node); if (e.Button == MouseButtons.Right) { ContextMenu cm = new ContextMenu(); if (p == SunModelPart.BusinessProcess && this.cmodel.BusinessProcess.Count() > 1) { MenuItem item = new MenuItem(); item.Text = "Delete"; item.Click += (s, EventArgs) => { RemoveItem_Click(sender, EventArgs, (TreeNode)e.Node); }; cm.MenuItems.Add(item); } if (p == SunModelPart.Measure || p == SunModelPart.Dimension || p == SunModelPart.Attribute) { MenuItem item = new MenuItem(); item.Text = "Delete"; item.Click += (s, EventArgs) => { RemoveItem_Click(sender, EventArgs, (TreeNode)e.Node); }; cm.MenuItems.Add(item); } if (p == SunModelPart.SharedNodeReference && ((Level)e.Node.Tag).IsSharedLevel()) { MenuItem item = new MenuItem(); item.Text = "Delete"; item.Click += (s, EventArgs) => { RemoveItem_Click(sender, EventArgs, (TreeNode)e.Node); }; cm.MenuItems.Add(item); } if (p == SunModelPart.Attribute) { MenuItem item = new MenuItem(); item.Text = "Convert To Shared Node"; item.Click += (s, EventArgs) => { ConvertItem_Click(sender, EventArgs, (TreeNode)e.Node, ReferenceType.Key); }; cm.MenuItems.Add(item); item = new MenuItem(); item.Text = "Convert To Cross Dimensional Attribute"; item.Click += (s, EventArgs) => { ConvertItem_Click(sender, EventArgs, (TreeNode)e.Node, ReferenceType.CDAKey); }; cm.MenuItems.Add(item); item = new MenuItem(); item.Text = "Convert To Converged Shared Node"; item.Click += (s, EventArgs) => { ConvertItem_Click(sender, EventArgs, (TreeNode)e.Node, ReferenceType.ConvergedKey); }; cm.MenuItems.Add(item); } if (p == SunModelPart.BusinessProcess || p == SunModelPart.DimensionGroup) { MenuItem item = new MenuItem("Add Dimension", AddDimension_Click); cm.MenuItems.Add(item); } if (p == SunModelPart.BusinessProcess || p == SunModelPart.MeasureGroup) { MenuItem item = new MenuItem("Add Measure", AddMeasure_Click); cm.MenuItems.Add(item); } if (p == SunModelPart.Measure) { MenuItem item = new MenuItem(); item.Text = "Add Aggegation"; item.Click += (s, EventArgs) => { AddAggregation_Click(sender, EventArgs, (TreeNode)e.Node); }; cm.MenuItems.Add(item); } if (p == SunModelPart.Dimension) { TreeNodeCollection n = ((TreeNode)e.Node).Nodes; if (n == null || n.Count == 0) { MenuItem item = new MenuItem(); item.Text = "Add Attribute"; item.Click += (s, EventArgs) => { AddAttribute_Click(sender, EventArgs, (TreeNode)e.Node); }; cm.MenuItems.Add(item); } } if (p == SunModelPart.Attribute) { MenuItem item = new MenuItem(); item.Text = "Add Attribute"; item.Click += (s, EventArgs) => { AddAttribute_Click(sender, EventArgs, (TreeNode)e.Node); }; cm.MenuItems.Add(item); } cm.Show((Control)sender, e.Location); } }
/// <summary> /// Updates the property grid. /// </summary> /// <param name="node">The node to be shown.</param> private void UpdatePropertyGrid(TreeNode node) { SunModelPart p = Utils.GetTreeNodeClass(node); string businessProcess = this.tabControlArea.SelectedTab.Text; BusinessProcess b = this.cmodel.GetBusinessProcess(businessProcess); if (p == SunModelPart.BusinessProcess) { this.propertyGridArea.SelectedObject = b; } else if (p == SunModelPart.Measure || p == SunModelPart.Dimension) { this.propertyGridArea.SelectedObject = node.Tag; } else if (p == SunModelPart.Attribute || p == SunModelPart.SharedNode) { PropertyDescriptorCollection props = TypeDescriptor.GetProperties(node.Tag.GetType()); foreach (PropertyDescriptor desc in props) { ReadOnlyAttribute roAttribute = (ReadOnlyAttribute) desc.Attributes[typeof(ReadOnlyAttribute)]; FieldInfo roFieldToChange = roAttribute.GetType().GetField("isReadOnly", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); roFieldToChange.SetValue(roAttribute, (desc.Name == "UID")); BrowsableAttribute brAttribute = (BrowsableAttribute) desc.Attributes[typeof(BrowsableAttribute)]; FieldInfo brFieldToChange = brAttribute.GetType().GetField("browsable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); brFieldToChange.SetValue(brAttribute, (desc.Name != "Level1" && desc.Name != "X_position" && desc.Name != "Y_position" && ( p != SunModelPart.SharedNode || (p == SunModelPart.SharedNode && desc.Name != "CDAKey" && desc.Name != "ConvergedKey" && desc.Name != "Key")))); } this.propertyGridArea.SelectedObject = node.Tag; } else if (p == SunModelPart.SharedNodeReference) { PropertyDescriptorCollection props = TypeDescriptor.GetProperties((typeof(Level))); foreach (PropertyDescriptor desc in props) { ReadOnlyAttribute roAttribute = (ReadOnlyAttribute) desc.Attributes[typeof(ReadOnlyAttribute)]; FieldInfo roFieldToChange = roAttribute.GetType().GetField("isReadOnly", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); roFieldToChange.SetValue(roAttribute, true); BrowsableAttribute brAttribute = (BrowsableAttribute) desc.Attributes[typeof(BrowsableAttribute)]; FieldInfo brFieldToChange = brAttribute.GetType().GetField("browsable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); brFieldToChange.SetValue(brAttribute, (desc.Name == "UID" || desc.Name == "CDAKey" || desc.Name == "ConvergedKey" || desc.Name == "Key")); } this.propertyGridArea.SelectedObject = node.Tag; } else { this.propertyGridArea.SelectedObject = node.Tag; } }