public XPropDescriptor(XProp prop, Attribute[] attrs) : base(prop.Name, attrs) { this.xProp = prop; }
/// <summary> /// ���ݽڵ���Ϣ�ҵ���ǰ�������Լ������Ƿ��ж�Ӧ������ /// û������ݽڵ���Ϣ���������� /// ���ɼ�����������Valueֵ��ƥ�� �������� /// </summary> /// <param name="Property"></param> /// <param name="FuntionInfos"></param> /// <returns>�����ҵ�����</returns> private XProp FindFunctionProperty(XmlNode Property, List<XProp> FuntionInfos, bool visible) { //Ѱ��ƥ����Ϣ foreach (XProp element in FuntionInfos) { if (element.Name == Property.Attributes["name"].Value && element.VarName == Property.Attributes["varname"].Value && element.ValueType == Property.Attributes["type"].Value) { if (Property.Attributes.Count >= 5) {//����������Ϣ element.ValueExplain = Property.Attributes["exp"].Value; if (Property.Attributes.Count >= 6) {//�����Ż�������Ϣ element.Opnode = Property.Attributes["opnode"].Value; element.Optype = Property.Attributes["optype"].Value; element.Opvalue = Property.Attributes["opvalue"].Value; element.Relate = Property.Attributes["relate"].Value; } } if (Property.Attributes["type"].Value != "MyEnum") { if (!visible) {//���ɼ�����ֱ�Ӹ���ֵ element.TheValue = Property.InnerText; } return element; } else if (element.EnumValue == Property.InnerText) { if (!visible) { element.TheValue = Property.InnerText.Split(',')[0]; } return element; } } } //��������Ϣ XProp newFun = new XProp(); newFun.Name = Property.Attributes["name"].Value; newFun.VarName = Property.Attributes["varname"].Value; newFun.ValueType = Property.Attributes["type"].Value; if (Property.Attributes.Count >= 5) { newFun.ValueExplain = Property.Attributes["exp"].Value; if (Property.Attributes.Count >= 6) { newFun.Opnode = Property.Attributes["opnode"].Value; newFun.Optype = Property.Attributes["optype"].Value; newFun.Opvalue = Property.Attributes["opvalue"].Value; newFun.Relate = Property.Attributes["relate"].Value; } } if (newFun.ValueType != "MyEnum") { object obj = Property.InnerText; if (newFun.ValueType != "queue" && obj.ToString() != "array") { Convert.ChangeType(obj, Type.GetType(newFun.ValueType)); } newFun.TheValue = obj; } else { newFun.EnumValue = Property.InnerText; newFun.TheValue = Property.InnerText.Split(',')[0]; } return newFun; }
/* ���ڴ洢�õ�List<ArrayList>��ʽ����Ϣ���ݺ� * Cassview��ʹ�õĿؼ���ϢctrlsInfo * ����ʹ�õĿؼ���������ϢblockInfo��linesInfo * ����֮���ת�� */ /// <summary> /// ����Ϣ�����ж�ȡ��Ϣ /// </summary> /// <param name="infoArray"></param> private void ReadInfo(List<List<ArrayList>> infoArray) { List<ArrayList> ctrol = infoArray[0]; List<ArrayList> line = infoArray[1]; for (int i = 0; i < ctrol.Count; i++) { ArrayList temp = ctrol[i]; ControlInfo tempCtrl = new ControlInfo(); BlockInfo tempBlock = new BlockInfo(); string[] BasicInfo = (string[])(temp[0]); Point[] SizeInfo = (Point[])(temp[3]); List<string[]> FuncInfo1 = (List<string[]>)(temp[1]); List<string[]> FuncInfo2 = (List<string[]>)(temp[2]); //�������� tempCtrl.ControlNum = Convert.ToInt32(BasicInfo[0]); tempCtrl.ControlName = BasicInfo[1]; tempBlock.BlockNum = tempCtrl.ControlNum; tempBlock.BlockName = tempCtrl.ControlName; tempCtrl.SortName = BasicInfo[2]; if (BasicInfo[3] != null) { tempCtrl.OtherProperty = BasicInfo[3].Split('$'); } tempCtrl.HasEnumProperty = Convert.ToBoolean(BasicInfo[4]); tempCtrl.CodeInfo = new string[3]; tempCtrl.CodeInfo[0] = BasicInfo[5]; tempCtrl.CodeInfo[1] = BasicInfo[6]; tempCtrl.CodeInfo[2] = BasicInfo[7]; string[] LoadInfo = BasicInfo[8].Split(';'); tempCtrl.CanOptimize = Convert.ToBoolean(BasicInfo[10]); if (LoadInfo[0] != "0") {//��������˿ڱ��� �˿ڳ�ֵ��Ϣ20090616 List<string[]> tempIOinfo = new List<string[]>(); foreach (string element in LoadInfo) { string[] info = new string[4]; info[2] = element.Split(',')[0]; info[3] = element.Split(',')[1]; tempIOinfo.Add(info); } tempCtrl.InputInfo = tempIOinfo; } else { tempCtrl.InputInfo = InitializeIOinfo(Convert.ToInt32(BasicInfo[8])); } tempCtrl.OutputInfo = InitializeIOinfo(Convert.ToInt32(BasicInfo[9])); tempCtrl.VisibleFunctionProperty = new List<XProp>(); tempCtrl.UnvisibleFunctionProperty = new List<XProp>(); if (FuncInfo1 != null) {//�ɼ����� for (int x = 0; x < FuncInfo1.Count; x++) { XProp attribute = new XProp(); attribute.EnumValue = FuncInfo1[x][0]; attribute.Name = FuncInfo1[x][1]; attribute.TheValue = FuncInfo1[x][2]; attribute.ValueType = FuncInfo1[x][3]; attribute.VarName = FuncInfo1[x][4]; attribute.ValueExplain = FuncInfo1[x][5]; attribute.Opnode = FuncInfo1[x][6]; attribute.Optype = FuncInfo1[x][7]; attribute.Opvalue = FuncInfo1[x][8]; attribute.Relate = FuncInfo1[x][9]; tempCtrl.VisibleFunctionProperty.Add(attribute); } } if (FuncInfo2 != null) {//�������� for (int y = 0; y < FuncInfo2.Count; y++) { XProp attribute = new XProp(); attribute.EnumValue = FuncInfo2[y][0]; attribute.Name = FuncInfo2[y][1]; attribute.TheValue = FuncInfo2[y][2]; attribute.ValueType = FuncInfo2[y][3]; attribute.VarName = FuncInfo2[y][4]; attribute.ValueExplain = FuncInfo2[y][5]; attribute.Opnode = FuncInfo2[y][6]; attribute.Optype = FuncInfo2[y][7]; attribute.Opvalue = FuncInfo2[y][8]; attribute.Relate = FuncInfo2[y][9]; tempCtrl.UnvisibleFunctionProperty.Add(attribute); } } //λ�á���С��Ϣ tempBlock.StartPoint = SizeInfo[0]; tempBlock.Width = SizeInfo[1].X; tempBlock.Height = SizeInfo[1].Y; this.ctrlsInfo.Add(tempCtrl); this.blocksInfo.Add(tempBlock); } for (int i = 0; i < line.Count; i++) {//������Ϣ LineInfo tempLine = new LineInfo(); Point[] SEinfo = (Point[])(line[i][0]); string[] SEctrl = (string[])(line[i][1]); tempLine.StartPoint = SEinfo[0]; tempLine.EndPoint = SEinfo[1]; tempLine.StartInfo = SEctrl[0]; tempLine.EndInfo = SEctrl[1]; this.linesInfo.Add(tempLine); } portReflash();//ˢ�¿ؼ��˿���Ϣ //���¼��������м�� DrawLineArithmetic newArith = new DrawLineArithmetic(this.linesInfo, this.blocksInfo); this.linesInfo = newArith.ModifyLines; }
/// <summary> /// ���ݹ������� /// </summary> /// <param name="properties"></param> /// <returns></returns> private static List<XProp> CopyProperty(List<XProp> properties) { List<XProp> copyP = new List<XProp>(); foreach (XProp element in properties) { XProp newPerty = new XProp(); newPerty.EnumValue = element.EnumValue; newPerty.Name = element.Name; newPerty.Opnode = element.Opnode; newPerty.Optype = element.Optype; newPerty.Opvalue = element.Opvalue; newPerty.Relate = element.Relate; newPerty.TheValue = element.TheValue; newPerty.ValueExplain = element.ValueExplain; newPerty.ValueType = element.ValueType; newPerty.VarName = element.VarName; copyP.Add(newPerty); } return copyP; }
/// <summary> /// ��ȡ"FunctionProperty"�ӽڵ�,�Կؼ���Ϣ�Ĺ������Բ��ֽ��г�ʼ�� /// </summary> /// <param name="node">�������Խڵ�</param> /// <param name="CtrlInfo">�ؼ���Ϣ</param> /// <returns>�����Ϣ��ֵ��Ŀؼ���Ϣ</returns> public static void ReadFunctionProperty(XmlNode node, ref ControlInfo CtrlInfo) { List<XProp> VFunctionProperty = new List<XProp>(); List<XProp> UFunctionProperty = new List<XProp>(); foreach (XmlNode property in node.ChildNodes) { if (property.Name.Equals("Property")) { XProp Function = new XProp(); Function.Name = property.Attributes["name"].Value; Function.VarName = property.Attributes["varname"].Value; Function.ValueType = property.Attributes["type"].Value; if (property.Attributes.Count >= 5) {//����5������������Ϊ������ӵIJ���������Ϣ Function.ValueExplain = property.Attributes["exp"].Value; if (property.Attributes.Count >= 6) {//�������Կ�ʼΪ�Ż����� Function.Opnode = property.Attributes["opnode"].Value; Function.Optype = property.Attributes["optype"].Value; Function.Opvalue = property.Attributes["opvalue"].Value; Function.Relate = property.Attributes["relate"].Value; if (Function.Opnode != null || Function.Optype != null || Function.Opvalue != null | Function.Relate != null) { CtrlInfo.CanOptimize = true; } } } if (property.Attributes["visible"].Value == "yes") { if (property.Attributes["type"].Value != "MyEnum") {//20090709��Ӳ��ֿؼ���ģ������Ĺ������� object obj = property.InnerText; Convert.ChangeType(obj, Type.GetType(property.Attributes["type"].Value)); Function.TheValue = obj; } else if (property.Attributes["type"].Value == "MyEnum") { CtrlInfo.HasEnumProperty = true; Function.EnumValue = property.InnerText; Function.TheValue = property.InnerText.Split(',')[0]; } VFunctionProperty.Add(Function); } else { if (property.Attributes["type"].Value != "MyEnum") { object obj = property.InnerText; if (Function.ValueType != "queue" && obj.ToString() != "array") {//20090604����ӵĶ���������λ��������,����ֵ������ Convert.ChangeType(obj, Type.GetType(property.Attributes["type"].Value)); } Function.TheValue = obj; } else { Function.EnumValue = property.InnerText; Function.TheValue = property.InnerText.Split(',')[0]; } UFunctionProperty.Add(Function); } }//end if (property.Name.Equals("Property")) }//end foreach (XmlNode property in node.ChildNodes) CtrlInfo.VisibleFunctionProperty = VFunctionProperty; CtrlInfo.UnvisibleFunctionProperty = UFunctionProperty; }
/// <summary> /// �ӿؼ���Ϣ�л�ȡ��ʾ��Ϣ /// �������index��-1�ض�Ӧ��ŵIJ�����ʾ��Ϣ /// �������в�������ʾ��Ϣ /// </summary> /// <param name="ctrl">�ؼ���Ϣ</param> /// <param name="index">�������</param> /// <returns>��ʾ��Ϣ</returns> public void GetTipmessage(ControlInfo ctrl, int index) { List<string> TipMes = new List<string>();//�����õ���Ϣ���� string tip = null;//��ʾ if (ctrl.VisibleFunctionProperty.Count == 0 && ctrl.UnvisibleFunctionProperty.Count == 0) {//Ĭ�Ϲ�������Ϊ����û�в�����ʾ��Ϣ this.toolTip1.Hide(this); return; } if (index == -1) {//����ȫ���IJ�����Ϣ int paraCount = 0; //foreach (XProp element in ctrl.VisibleFunctionProperty) //{ // tempMes = AddressTable.ConvertShowType(element.ValueType) + " " + element.VarName; // if (TipMes.Count % 4 == 3)//ÿ��3������ // { tempMes = "\n" + tempMes; } // TipMes.Add(tempMes); //} foreach (XProp element in ctrl.UnvisibleFunctionProperty) { if (element.TheValue.ToString().Contains("array")) { //tempMes = AddressTable.ConvertShowType(element.ValueType) + " " + element.VarName; //if (TipMes.Count % 4 == 3) //{ tempMes = "\n" + tempMes; } //TipMes.Add(tempMes); paraCount++; } } paraCount += ctrl.VisibleFunctionProperty.Count; if (this.toolTip1.ToolTipTitle != ctrl.SortName) { //�ؼ������������� this.toolTip1.ToolTipTitle = ctrl.SortName; } if (PLCCodeEditor.CanTipCode.Contains(ctrl.CodeInfo[1])) { tip += "1������"; } else if (paraCount == 0) { tip += "����"; } else { tip += paraCount + "������"; } tip += "\n" + ctrl.OtherProperty[2]; this.toolTip1.Show(tip, this, new Point(Size.Width, 0)); //return TipMes; } else if(ctrl.VisibleFunctionProperty.Count!=0) {//�����ƶ�������Ϣ int ParaCount = 0;//����������� �ڲ��ɼ��������Ա����м�¼���� XProp tempFun = new XProp(); if (index < ctrl.VisibleFunctionProperty.Count) {//�������С�ڿɼ��������� tempFun = ctrl.VisibleFunctionProperty[index]; } //else //{ for (int x = 0; x < ctrl.UnvisibleFunctionProperty.Count; x++) { if (ctrl.UnvisibleFunctionProperty[x].TheValue.ToString().Contains("array")) {//���ɼ�������� if (index == ParaCount + ctrl.VisibleFunctionProperty.Count) {//��ŷ��� tempFun = ctrl.UnvisibleFunctionProperty[x]; } ParaCount++; } } //} //string tip = AddressTable.ConvertShowType(tempFun.ValueType) + " " + tempFun.VarName; //if (index <= ParaCount + ctrl.VisibleFunctionProperty.Count - 1) //{ // if (index != ParaCount + ctrl.VisibleFunctionProperty.Count - 1) // {//����Ϊ���һ������ // tip = tip + ",..."; // } // if (index != 0) // { //����Ϊ��һ������ // tip = "...," + tip; // } // //���ͺ��м���������Ϣ // tip += "\n" + tempFun.Name + ":\n" + tempFun.ValueExplain; // TipMes.Add(tip); //} string title = tempFun.Name + " (" + (index + 1) + "/" + (ParaCount + ctrl.VisibleFunctionProperty.Count) + ")"; tip = AddressTable.ConvertShowType2(tempFun.ValueType) + "\n"; for (int i = 0; i < tempFun.ValueExplain.Length; i++) { if (i % 11 == 0) {//11���ַ����� tip += "\n"; } tip += tempFun.ValueExplain[i]; } if (this.toolTip1.ToolTipTitle != title) { this.toolTip1.ToolTipTitle = title; } this.toolTip1.Show(tip, this, new Point(Size.Width, 0)); } //return TipMes; }
/// <summary> /// ��ǰ�ؼ���ij�����Ƿ�������ַ���� /// </summary> /// <param name="address">��ַ��Ϣ�б�</param> /// <param name="ctrl">��ǰ�ؼ���Ϣ</param> /// <param name="atribt">������Ϣ</param> /// <returns>���ڵ�ַ��Ϣ����Ϊtrue</returns> private bool Findaddressinfo(List<string[]> address, ControlInfo ctrl, XProp atribt) { foreach (string[] ads in address) { if (ads[0] == ctrl.CodeInfo[2]) {//�ؼ�����ͬ if (ads[6] == atribt.VarName) { return true; } } } return false; }