Example #1
0
        public override void OnPropertyGridPopupContextMenu(object sender, EventArgs e)
        {
            if (CurrentGrid.SelectedObject == null)
            {
                return;
            }

            base.OnPropertyGridPopupContextMenu(sender, e);

            if (CurrentGrid.SelectedGridItem.PropertyDescriptor != null)
            {
                XmlNode     selectedElement     = GetSelectedGridObject();
                XmlNodeList selectedSubElements = selectedElement.SelectNodes("*", WixFiles.WxsNsmgr);

                MenuItem menuItemSeparator1 = new IconMenuItem("-");
                CurrentGridContextMenu.MenuItems.Add(1, menuItemSeparator1);

                if (selectedSubElements.Count == 0)
                {
                    MenuItem subMenuItem = new IconMenuItem("Insert", new Bitmap(WixFiles.GetResourceStream("bmp.new.bmp")));
                    CurrentGridContextMenu.MenuItems.Add(1, subMenuItem);

                    XmlNode     definition  = WixFiles.GetXsdElementNode("Property");
                    XmlNodeList subElements = definition.SelectNodes("xs:complexType/xs:sequence/xs:element", WixFiles.XsdNsmgr);
                    foreach (XmlNode sub in subElements)
                    {
                        string subName = sub.Attributes["ref"].Value;

                        MenuItem subSubMenuItem = new IconMenuItem(subName);
                        subSubMenuItem.Click += new EventHandler(OnNewSubPropertyGridItem);

                        subMenuItem.MenuItems.Add(subSubMenuItem);
                    }
                }
                else if (selectedSubElements.Count == 1)
                {
                    MenuItem subMenuItem = new IconMenuItem("Remove " + selectedSubElements[0].Name, new Bitmap(WixFiles.GetResourceStream("bmp.new.bmp")));
                    CurrentGridContextMenu.MenuItems.Add(1, subMenuItem);
                    subMenuItem.Click += new EventHandler(OnRemoveSubPropertyGridItem);
                }
                else
                {
                    MenuItem subMenuItem = new IconMenuItem("Multiple subitems in property are unsupported!", new Bitmap(WixFiles.GetResourceStream("bmp.new.bmp")));
                    subMenuItem.Enabled = false;
                    CurrentGridContextMenu.MenuItems.Add(1, subMenuItem);
                }

                MenuItem menuItemSeparator2 = new IconMenuItem("-");
                CurrentGridContextMenu.MenuItems.Add(1, menuItemSeparator2);
            }
        }
Example #2
0
        public XmlAttributeAdapter(XmlNode xmlNode, WixFiles wixFiles, bool editSubNodes) : base(wixFiles)
        {
            this.xmlNode      = xmlNode;
            this.editSubNodes = editSubNodes;

            xmlNodeElement = WixFiles.GetXsdElementNode(xmlNode.Name);

            if (xmlNodeElement == null)
            {
                if (xmlNode.NodeType != XmlNodeType.ProcessingInstruction)
                {
                    if (warnedNodeNames.Contains(xmlNode.Name) == false)
                    {
                        MessageBox.Show(String.Format("\"{0}\" is not supported in version {1} of WiX!\r\n\r\nPossibly this type is supported in another version of WiX and wix.xsd.", xmlNode.Name, WixEditSettings.Instance.WixBinariesVersion), xmlNode.Name, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        warnedNodeNames.Add(xmlNode.Name);
                    }
                }
            }
            else
            {
                XmlNode deprecated = xmlNodeElement.SelectSingleNode("xs:annotation/xs:appinfo/xse:deprecated", wixFiles.XsdNsmgr);
                if (deprecated != null)
                {
                    if (warnedNodeNames.Contains(xmlNode.Name) == false)
                    {
                        string msg = String.Format("\"{0}\" is deprecated in version {1} of WiX.", xmlNode.Name, WixEditSettings.Instance.WixBinariesVersion);
                        if (deprecated.Attributes["ref"] != null)
                        {
                            msg = String.Format("{0}\r\n\r\nPlease use \"{1}\" instead.", msg, deprecated.Attributes["ref"].Value);
                        }
                        MessageBox.Show(msg, xmlNode.Name, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        warnedNodeNames.Add(xmlNode.Name);
                    }
                }

                if (xmlNodeElement.Attributes["type"] != null && xmlNodeElement.Attributes["type"].Value != null)
                {
                    xmlNodeDefinition = wixFiles.XsdDocument.SelectSingleNode(String.Format("/xs:schema/xs:complexType[@name='{0}']/xs:simpleContent/xs:extension", xmlNodeElement.Attributes["type"].Value), wixFiles.XsdNsmgr);
                    if (xmlNodeDefinition == null)
                    {
                        xmlNodeDefinition    = wixFiles.XsdDocument.SelectSingleNode(String.Format("/xs:schema/xs:complexType[@name='{0}']", xmlNodeElement.Attributes["type"].Value), wixFiles.XsdNsmgr);
                        showInnerTextIfEmpty = false;
                    }
                    else
                    {
                        showInnerTextIfEmpty = true;
                    }
                }
                else
                {
                    xmlNodeDefinition = xmlNodeElement.SelectSingleNode("xs:complexType/xs:simpleContent/xs:extension", wixFiles.XsdNsmgr);
                    if (xmlNodeDefinition == null)
                    {
                        xmlNodeDefinition = xmlNodeElement.SelectSingleNode("xs:complexType", wixFiles.XsdNsmgr);
                        if (xmlNodeDefinition == null)
                        {
                            // Nothing?
                            xmlNodeDefinition    = xmlNodeElement;
                            showInnerTextIfEmpty = true;
                        }
                        else
                        {
                            showInnerTextIfEmpty = false;
                        }
                    }
                    else
                    {
                        showInnerTextIfEmpty = true;
                    }
                }
            }
        }