示例#1
0
        private void OnNew(TreeNode node)
        {
            IElementPropertyInfo elementInfo = node.Tag as IElementPropertyInfo;

            if (elementInfo == null)
            {
                return;
            }

            // Create a new element.

            IElementPropertyInfo newElementInfo = elementInfo.CreateElement();

            OnElementChanged();

            // Add a new node.

            TreeNode newNode = AddNodeForElement(node, newElementInfo);

            newNode.ExpandAll();
            tvwElements.Focus();
            tvwElements.Select();
            tvwElements.SelectedNode = newNode;

            if (newElementInfo.CanRenameElement)
            {
                newNode.BeginEdit();
            }
        }
示例#2
0
        private void DisplayElement(IElementPropertyInfo element)
        {
            Debug.Assert(element != null, "element != null");

            // Set the label.

            lblName.Text = element.Name;

            // Property page control.

            ClearCurrentPage();
            ElementPropertyPage page = element.PropertyPage;

            if (page != null)
            {
                bool pageAdded = AddPage(page);
                page.Size     = panDetails.Size;
                page.Visible  = true;
                m_currentPage = page;

                // Now that everything is set fire the event if needed.

                if (pageAdded)
                {
                    OnPageAdded(EventArgs.Empty);
                }
            }
        }
示例#3
0
        private TreeNode FindNodeForElement(TreeNode node, object element)
        {
            if (node.Tag is IObjectPropertyInfo)
            {
                IObjectPropertyInfo objectInfo = (IObjectPropertyInfo)node.Tag;
                if (object.Equals(objectInfo.Object, element))
                {
                    return(node);
                }
            }
            else if (node.Tag is IElementPropertyInfo)
            {
                IElementPropertyInfo elementInfo = (IElementPropertyInfo)node.Tag;
                if (object.Equals(elementInfo.Element, element))
                {
                    return(node);
                }
            }

            // Iterate.

            foreach (TreeNode childNode in node.Nodes)
            {
                TreeNode foundNode = FindNodeForElement(childNode, element);
                if (foundNode != null)
                {
                    return(foundNode);
                }
            }

            return(null);
        }
示例#4
0
        private void OnDelete(TreeNode node)
        {
            // Prompt first.

            string promptText = "Are you sure you want to delete '" + node.Text + "'?";

            if (MessageBox.Show(promptText, "Confirm deletion", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
            {
                return;
            }

            // Delete the element itself.

            IElementPropertyInfo elementInfo = node.Tag as IElementPropertyInfo;

            if (elementInfo == null)
            {
                return;
            }
            elementInfo.DeleteElement();
            OnElementChanged();

            // Delete the node.

            ClearCurrentPage();
            TreeNode parentNode = node.Parent;

            tvwElements.Nodes.Remove(node);
            tvwElements.Focus();
            tvwElements.Select();
            tvwElements.SelectedNode = parentNode;
        }
示例#5
0
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }

                if (m_settings != null)
                {
                    m_settings.Refresh -= new EventHandler(m_settings_Refresh);
                    m_settings          = null;
                }

                // Dispose of all repositories that support IDisposable (the manager may not have taken
                // care of all of them).

                m_selectedElement = null;

                TreeView.ClearTagsRecursive(tvwElements.Nodes);
            }

            base.Dispose(disposing);
        }
示例#6
0
        private void RefreshNode(TreeNode node)
        {
            node.Nodes.Clear();
            IElementPropertyInfo elementInfo = node.Tag as IElementPropertyInfo;

            foreach (IElementPropertyInfo childElementInfo in elementInfo.Elements)
            {
                AddNodeForElement(node, childElementInfo);
            }
        }
示例#7
0
        private void tvwElements_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
        {
            IElementPropertyInfo elementInfo = e.Node.Tag as IElementPropertyInfo;

            DisplayElement(elementInfo);

            // Update the toolbar and context menu.

            UpdateToolbarButtons(elementInfo);
            SetContextMenu(tvwElements.SelectedNode);
        }
示例#8
0
        private void ElementNodeSelected(TreeNode node)
        {
            Debug.Assert(node != null, "node != null");

            IElementPropertyInfo previousElement = m_selectedElement;

            if (node.Tag is IElementPropertyInfo)
            {
                DisplayElement((IElementPropertyInfo)node.Tag);
                m_selectedElement = (IElementPropertyInfo)node.Tag;
            }
        }
示例#9
0
 private void UpdateToolbarButtons(IElementPropertyInfo elementInfo)
 {
     if (IsReadOnly)
     {
         tbbNew.Enabled    = false;
         tbbDelete.Enabled = false;
     }
     else
     {
         tbbNew.Enabled    = elementInfo.CanCreateElement;
         tbbDelete.Enabled = elementInfo.CanDeleteElement;
     }
 }
示例#10
0
 protected ElementPropertyInfo(IElementPropertyInfo parentInfo, string imageResource, object element)
 {
     m_element    = element;
     m_parentInfo = parentInfo;
     if (parentInfo != null)
     {
         m_objectInfo = parentInfo.ObjectInfo;
     }
     else
     {
         m_objectInfo = this as IObjectPropertyInfo;
     }
     m_imageResource = imageResource;
 }
示例#11
0
        private void tvwElements_AfterLabelEdit(object sender, System.Windows.Forms.NodeLabelEditEventArgs e)
        {
            try
            {
                // Re-enable the Delete menu item.

                if (m_deleteMenuItem != null)
                {
                    m_deleteMenuItem.Enabled = true;
                }

                string newName = e.Label;
                if (newName != null)
                {
                    IElementPropertyInfo elementInfo = e.Node.Tag as IElementPropertyInfo;
                    if (elementInfo != null)
                    {
                        // Make sure any changes in the property page is captured.

                        if (m_currentPage != null)
                        {
                            SavePropertyPage(m_currentPage);
                        }
                        elementInfo.RenameElement(newName);
                        foreach (IElementPropertyInfo childElementInfo in elementInfo.Elements)
                        {
                            childElementInfo.RefreshParentElement(elementInfo.Element);
                        }

                        // Refresh the nodes.

                        DisplayElement(elementInfo);
                        OnElementChanged();
                    }
                }
            }
            catch (System.Exception ex)
            {
                new ExceptionDialog(ex, "The following exception occurred:").ShowDialog();
                e.CancelEdit = true;
                e.Node.BeginEdit();
            }
        }
示例#12
0
        /// <summary>
        /// The base implementation compares the node text first using case-insensitive comparison and then,
        /// if the elements are equal, case-sensitive comparison.
        /// </summary>
        public virtual int CompareTo(object obj)
        {
            IElementPropertyInfo other = obj as IElementPropertyInfo;

            if (other == null)
            {
                throw new System.ArgumentException(string.Format("Only another IElementPropertyInfo object can be"
                                                                 + " compared to a '{0}' object, but '{1}' was passed in.", GetType().FullName,
                                                                 (obj == null ? "<null>" : obj.GetType().FullName)), "obj");
            }

            int result = string.Compare(Name, other.Name, true);

            if (result != 0)
            {
                return(result);
            }

            return(string.Compare(Name, other.Name, false));
        }
示例#13
0
        private TreeNode AddNodeForElement(TreeNode parentNode, IElementPropertyInfo elementInfo)
        {
            // Add the node.

            TreeNode newNode = new TreeNode(elementInfo.Name, elementInfo.ImageIndex, elementInfo.ImageIndex);

            newNode.Tag = elementInfo;
            parentNode.Nodes.Add(newNode);

            // Add the page for this element.

            AddPage(elementInfo.PropertyPage);

            // Iterate.

            foreach (IElementPropertyInfo childElementInfo in elementInfo.Elements)
            {
                AddNodeForElement(newNode, childElementInfo);
            }
            return(newNode);
        }
示例#14
0
        private void ViewHandler(object sender, EventArgs e)
        {
            // Change the view.

            MenuItem menu = sender as MenuItem;

            if (menu == null)
            {
                return;
            }

            TreeNode node = tvwElements.ContextNode;

            if (node == null)
            {
                return;
            }

            IElementPropertyInfo elementInfo = node.Tag as IElementPropertyInfo;

            if (elementInfo == null)
            {
                return;
            }

            // Make sure any changes in the page are captured.

            if (m_currentPage != null)
            {
                SavePropertyPage(m_currentPage);
            }

            // Reshow the element.

            elementInfo.ViewElement(menu.Text);
            DisplayElement(elementInfo);
        }
示例#15
0
        private void tvwElements_BeforeLabelEdit(object sender, System.Windows.Forms.NodeLabelEditEventArgs e)
        {
            if (!m_allowEdit || IsReadOnly || (IsEditMode && e.Node.Parent == null))
            {
                e.CancelEdit = true;
            }
            else
            {
                IElementPropertyInfo propertyInfo = e.Node.Tag as IElementPropertyInfo;
                if (propertyInfo == null || !propertyInfo.CanRenameElement)
                {
                    e.CancelEdit = true;
                }
                else
                {
                    // Disable the Delete menu item while editing, so that the Del key doesn't activate it.

                    if (m_deleteMenuItem != null)
                    {
                        m_deleteMenuItem.Enabled = false;
                    }
                }
            }
        }
示例#16
0
 public ElementEventArgs(IElementPropertyInfo element)
 {
     m_element = element;
 }
示例#17
0
 public void Refresh(IElementPropertyInfo elementInfo)
 {
     OnRefresh(elementInfo.Element);
 }
示例#18
0
        private void SetContextMenu(TreeNode node)
        {
            // Clear what may already be there.

            mnuElements.MenuItems.Clear();
            m_deleteMenuItem = null;

            if (!IsReadOnly)
            {
                // Grab the node and the element info.

                if (node == null)
                {
                    return;
                }

                IElementPropertyInfo elementInfo = node.Tag as IElementPropertyInfo;
                if (elementInfo == null)
                {
                    return;
                }

                // Add the menu items.

                if (elementInfo.CanCreateElement)
                {
                    mnuElements.MenuItems.Add(new MenuItem("New " + elementInfo.CreateElementName,
                                                           new System.EventHandler(NewHandler), Shortcut.Ins));
                }

                if (elementInfo.Views != null && elementInfo.Views.Length > 0)
                {
                    MenuItem mnuView     = new MenuItem("View");
                    string   currentView = elementInfo.CurrentView;

                    foreach (string view in elementInfo.Views)
                    {
                        MenuItem menu = new MenuItem(view, new System.EventHandler(ViewHandler));

                        if (currentView == null)
                        {
                            menu.Checked = true;
                            currentView  = view;
                        }
                        else
                        {
                            menu.Checked = view == currentView;
                        }

                        mnuView.MenuItems.Add(menu);
                    }
                    mnuElements.MenuItems.Add(mnuView);
                }

                if (elementInfo.CanDeleteElement)
                {
                    m_deleteMenuItem = new MenuItem("Delete", new System.EventHandler(DeleteHandler), Shortcut.Del);
                    mnuElements.MenuItems.Add(m_deleteMenuItem);
                }

                if (elementInfo.CanRenameElement)
                {
                    mnuElements.MenuItems.Add(new MenuItem("Rename", new System.EventHandler(RenameHandler),
                                                           Shortcut.F2));
                }
            }
        }