public static enumOperatorCategory GetTypeCategory(Type t)
 {
     object[] attrs = t.GetCustomAttributes(typeof(MathNodeCategoryAttribute), false);
     if (attrs != null && attrs.Length > 0)
     {
         MathNodeCategoryAttribute attr = attrs[0] as MathNodeCategoryAttribute;
         if (attr != null)
         {
             return(attr.NodeCategory);
         }
     }
     return(enumOperatorCategory.Decimal);
 }
コード例 #2
0
        public void AddMathNode(Type type)
        {
            enumOperatorCategory category = MathNodeCategoryAttribute.GetTypeCategory(type);

            if ((category & enumOperatorCategory.Logic) != 0)
            {
                if (!typeIconsLogic.Contains(type))
                {
                    typeIconsLogic.AddIcon(type);
                }
            }
            if ((category & enumOperatorCategory.Integer) != 0)
            {
                if (!typeIconsInteger.Contains(type))
                {
                    typeIconsInteger.AddIcon(type);
                }
            }
            if ((category & enumOperatorCategory.String) != 0)
            {
                if (!typeIconsString.Contains(type))
                {
                    typeIconsString.AddIcon(type);
                }
            }
            if ((category & enumOperatorCategory.System) != 0)
            {
                if (!typeIconsOther.Contains(type))
                {
                    typeIconsOther.AddIcon(type);
                }
            }
            if ((category & enumOperatorCategory.Decimal) != 0)
            {
                if (!typeIcons1.Contains(type))
                {
                    typeIcons1.AddIcon(type);
                }
            }
        }
コード例 #3
0
        public MathExpEditor()
        {
            InitializeComponent();
            //
            mathExpCtrl1.SetMathEditor(this);
            //
            List <Type> NodeTypes;
            List <Type> NodeTypesLogic;
            List <Type> NodeTypesInteger;
            List <Type> NodeTypesString;
            List <Type> NodeTypesOther;

            propertyGrid1.PropertyValueChanged += new PropertyValueChangedEventHandler(propertyGrid1_PropertyValueChanged);
            propertyGrid2.PropertyValueChanged += new PropertyValueChangedEventHandler(propertyGrid2_PropertyValueChanged);
            tabGreek.Text    = new string((char)0x03b1, 1) + " - " + new string((char)0x03c9, 1);
            NodeTypes        = new List <Type>();     //decimal nodes
            NodeTypesLogic   = new List <Type>();     //logic nodes
            NodeTypesInteger = new List <Type>();     //integer nodes
            NodeTypesString  = new List <Type>();     //string nodes
            NodeTypesOther   = new List <Type>();     //other nodes
            //load types in this DLL
            Type[]      tps0  = this.GetType().Assembly.GetExportedTypes();
            List <Type> types = MathNode.MathNodePlugIns;

            Type[] tps = new Type[tps0.Length + types.Count];
            tps0.CopyTo(tps, 0);
            types.CopyTo(tps, tps0.Length);
            for (int i = 0; i < tps.Length; i++)
            {
                enumOperatorCategory opCat = MathNodeCategoryAttribute.GetTypeCategory(tps[i]);
                if (opCat != enumOperatorCategory.Internal)
                {
                    if (!tps[i].IsAbstract && tps[i].IsSubclassOf(typeof(MathNode)))
                    {
                        if (!tps[i].Equals(typeof(MathNodeRoot)))
                        {
                            if ((opCat & enumOperatorCategory.Logic) != 0)
                            {
                                NodeTypesLogic.Add(tps[i]);
                            }
                            if ((opCat & enumOperatorCategory.Integer) != 0)
                            {
                                NodeTypesInteger.Add(tps[i]);
                            }
                            if ((opCat & enumOperatorCategory.String) != 0)
                            {
                                NodeTypesString.Add(tps[i]);
                            }
                            if ((opCat & enumOperatorCategory.System) != 0)
                            {
                                if (ExcludeProjectItem)
                                {
                                    object[] vs = tps[i].GetCustomAttributes(typeof(ProjectItemAttribute), true);
                                    if (vs != null && vs.Length > 0)
                                    {
                                        continue;
                                    }
                                }
                                NodeTypesOther.Add(tps[i]);
                            }
                            if ((opCat & enumOperatorCategory.Decimal) != 0)
                            {
                                NodeTypes.Add(tps[i]);
                            }
                        }
                    }
                }
            }
            //load types from configuration XML
            string file = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(this.GetType().Assembly.Location), "MathTypes.xml");

            if (System.IO.File.Exists(file))
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(file);
                if (doc.DocumentElement != null)
                {
                    for (int i = 0; i < doc.DocumentElement.ChildNodes.Count; i++)
                    {
                        try
                        {
                            Type t = XmlUtil.GetLibTypeAttribute(doc.DocumentElement.ChildNodes[i]);
                            enumOperatorCategory opCat = MathNodeCategoryAttribute.GetTypeCategory(t);
                            if (opCat != enumOperatorCategory.Internal)
                            {
                                if ((opCat & enumOperatorCategory.Logic) != 0)
                                {
                                    if (!NodeTypesLogic.Contains(t))
                                    {
                                        NodeTypesLogic.Add(t);
                                    }
                                }
                            }
                            if ((opCat & enumOperatorCategory.Integer) != 0)
                            {
                                if (!NodeTypesInteger.Contains(t))
                                {
                                    NodeTypesInteger.Add(t);
                                }
                            }
                            if ((opCat & enumOperatorCategory.String) != 0)
                            {
                                if (!NodeTypesString.Contains(t))
                                {
                                    NodeTypesString.Add(t);
                                }
                            }
                            if ((opCat & enumOperatorCategory.System) != 0)
                            {
                                if (!NodeTypesOther.Contains(t))
                                {
                                    NodeTypesOther.Add(t);
                                }
                            }
                            if ((opCat & enumOperatorCategory.Decimal) != 0)
                            {
                                if (!NodeTypes.Contains(t))
                                {
                                    NodeTypes.Add(t);
                                }
                            }
                        }
                        catch (Exception err)
                        {
                            MessageBox.Show(err.Message);
                        }
                    }
                }
            }
            typeIcons1.Category        = enumOperatorCategory.Decimal;
            typeIcons1.lblTooltips     = lblTooltips;
            typeIcons1.OnTypeSelected += new EventHandler(typeIcons1_OnTypeSelected);
            typeIcons1.LoadData(NodeTypes);

            typeIconsLogic.lblTooltips     = lblTooltips;
            typeIconsLogic.Category        = enumOperatorCategory.Logic;
            typeIconsLogic.OnTypeSelected += new EventHandler(typeIcons1_OnTypeSelected);
            typeIconsLogic.LoadData(NodeTypesLogic);

            typeIconsInteger.lblTooltips     = lblTooltips;
            typeIconsInteger.Category        = enumOperatorCategory.Integer;
            typeIconsInteger.OnTypeSelected += new EventHandler(typeIcons1_OnTypeSelected);
            typeIconsInteger.LoadData(NodeTypesInteger);

            typeIconsString.lblTooltips     = lblTooltips;
            typeIconsString.Category        = enumOperatorCategory.String;
            typeIconsString.OnTypeSelected += new EventHandler(typeIcons1_OnTypeSelected);
            typeIconsString.LoadData(NodeTypesString);

            typeIconsOther.lblTooltips     = lblTooltips;
            typeIconsOther.Category        = enumOperatorCategory.System;
            typeIconsOther.OnTypeSelected += new EventHandler(typeIcons1_OnTypeSelected);
            typeIconsOther.LoadData(NodeTypesOther);

            //
            greekLetters1.OnLetterSelected += new EventHandler(greekLetters1_OnLetterSelected);
            //
            mathExpCtrl1.OnFinish         += new EventHandler(btOK_Click);
            mathExpCtrl1.OnCancel         += new EventHandler(btCancel_Click);
            mathExpCtrl1.OnCreateCompound += new EventHandler(mathExpCtrl1_OnCreateCompound);
            //
            //
            MethodType mt = (MethodType)MathNode.GetService(typeof(MethodType));

            typeIconsOther.SetIconVisible(typeof(MathNodeArgument), (mt != null && mt.ParameterCount > 0));
            //
            propertyGrid2.SetOnValueChange(onValueChanged);
            //
            if (Clipboard.ContainsData("MathNode"))
            {
                btPaste.Enabled    = true;
                btPaste.ImageIndex = IMG_Paste_Enable;
            }
            tabControl1.SelectedTab = tabPageOther;
            typeIconsOther.LoadIcons();
        }