/// <summary> /// 复制控件 /// </summary> /// <param name="newName">新的名称</param> /// <param name="control">控件</param> /// <param name="parent">父控件</param> public void copyControl(String newName, FCView control, FCView parent) { XmlNode parentNode = m_nodes[parent]; XmlNode newNode = m_nodes[control].Clone(); XmlAttribute xmlAtr = null; //检查是否存在属性 foreach (XmlAttribute atr in newNode.Attributes) { if (atr.Name.ToLower() == "name") { xmlAtr = atr; break; } } if (xmlAtr == null) { xmlAtr = m_xmlDoc.CreateAttribute("name"); newNode.Attributes.Append(xmlAtr); } xmlAtr.Value = newName; parentNode.AppendChild(newNode); FCView newControl = createControl(newNode, newNode.Name.ToLower()); setAttributesBefore(newNode, newControl); parent.addControl(newControl); setAttributesAfter(newNode, newControl); m_controls.Add(newControl); onAddControl(newControl, newNode); }
/// <summary> /// 添加控件到XML中 /// </summary> /// <param name="control">控件</param> /// <param name="parent">父控件</param> public void addControl(FCView control, FCView parent) { if (m_nodes.ContainsKey(control)) { XmlNode node = m_nodes[control]; if (m_nodes.ContainsKey(parent)) { XmlNode parentNode = m_nodes[parent]; parentNode.AppendChild(node); parent.addControl(control); m_controls.Add(control); onAddControl(control, node); } } }
/// <summary> /// 读取XML /// </summary> /// <param name="node">XML节点</param> /// <param name="parent">父控件</param> public virtual FCView readNode(XmlNode node, FCView parent) { String type = node.Name.ToLower(); FCView control = createControl(node, type); if (control != null) { control.Native = m_native; if (parent != null) { parent.addControl(control); } else { m_native.addControl(control); } //前设置属性 setAttributesBefore(node, control); if (control is FCSplitLayoutDiv) { //创建分割层 createSplitLayoutSubProperty(node, control as FCSplitLayoutDiv); } else if (control is FCChart) { createChartSubProperty(node, control as FCChart); } else if (control is FCTableLayoutDiv) { createTableLayoutSubProperty(node, control as FCTableLayoutDiv); } else { //加载子节点 readChildNodes(node, control); } //后设置属性 setAttributesAfter(node, control); control.update(); onAddControl(control, node); } else { //创建子属性 createSubProperty(node, parent); } return(control); }
/// <summary> /// 创建控件到XML中 /// </summary> /// <param name="type">类型</param> /// <param name="parent">父控件</param> public FCView createControl(String type, FCView parent) { if (m_nodes.ContainsKey(parent)) { String lowerType = type.ToLower(); String createType = ""; if (lowerType == "grid") { lowerType = "table"; } else if (lowerType == "splitlayoutdiv") { lowerType = "div"; createType = "splitlayout"; } else if (lowerType == "tablelayoutdiv") { lowerType = "div"; createType = "tablelayout"; } else if (lowerType == "layoutdiv") { lowerType = "div"; createType = "layout"; } else if (lowerType == "groupbox") { lowerType = "div"; createType = "groupbox"; } else if (lowerType == "tabcontrol") { lowerType = "div"; createType = "tabcontrol"; } else if (lowerType == "tabpage") { lowerType = "div"; createType = "tabpage"; } else if (lowerType == "button") { lowerType = "input"; createType = "button"; } else if (lowerType == "checkbox") { lowerType = "input"; createType = "checkbox"; } else if (lowerType == "datepicker") { lowerType = "input"; createType = "datetime"; } else if (lowerType == "radiobutton") { lowerType = "input"; createType = "radio"; } else if (lowerType == "spin") { lowerType = "input"; createType = "range"; } else if (lowerType == "textbox") { lowerType = "input"; createType = "text"; } else if (lowerType == "combobox") { lowerType = "select"; } else if (lowerType == "linklabel") { lowerType = "a"; } XmlNode parentNode = m_nodes[parent]; XmlNode node = m_xmlDoc.CreateNode(XmlNodeType.Element, lowerType, ""); parentNode.AppendChild(node); if (createType != null && createType.Length > 0) { XmlAttribute xmlAtr = m_xmlDoc.CreateAttribute("type"); xmlAtr.Value = createType; node.Attributes.Append(xmlAtr); } FCView control = createControl(node, type); parent.addControl(control); m_nodes[control] = node; onAddControl(control, node); return(control); } return(null); }