/// <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> /// 添加控件 /// </summary> /// <param name="control">控件</param> /// <param name="column">列</param> /// <param name="row">行</param> public virtual void addControl(FCView control, int column, int row) { base.addControl(control); m_columns.add(column); m_rows.add(row); m_tableControls.add(control); }
/// <summary> /// 结束秒表 /// </summary> /// <param name="var">变量</param> /// <returns>状态</returns> private double STOPTIMER(CVariable var) { FCView control = m_xml.findControl(m_indicator.getText(var.m_parameters[0])); control.stopTimer((int)m_indicator.getValue(var.m_parameters[1])); return(0); }
/// <summary> /// 调用控件线程的方法 /// </summary> /// <param name="invokeSerialID">消息ID</param> public virtual void onInvoke(int invokeSerialID) { object args = null; FCView control = null; lock (m_invokeArgs) { if (m_invokeArgs.containsKey(invokeSerialID)) { args = m_invokeArgs.get(invokeSerialID); m_invokeArgs.remove(invokeSerialID); } } lock (m_invokeControls) { if (m_invokeControls.containsKey(invokeSerialID)) { control = m_invokeControls.get(invokeSerialID); m_invokeControls.remove(invokeSerialID); m_invokeArgs.put(m_invokeSerialID, control); } } if (control != null) { control.onInvoke(args); } }
/// <summary> /// 获取集合的交集 /// </summary> /// <returns>集合</returns> public static List <String> getUnionProperties(List <FCView> controls) { List <String> unionProperites = new List <String>(); Dictionary <String, int> propertyNames = new Dictionary <String, int>(); int targetsSize = controls.Count; for (int i = 0; i < targetsSize; i++) { FCView target = controls[i]; List <String> pList = target.getPropertyNames(); int pListSize = pList.Count; for (int j = 0; j < pListSize; j++) { String pName = pList[j]; if (!propertyNames.ContainsKey(pName)) { propertyNames[pName] = 1; } else { propertyNames[pName] = propertyNames[pName] + 1; } } } foreach (String key in propertyNames.Keys) { if (propertyNames[key] == targetsSize) { unionProperites.Add(key); } } propertyNames.Clear(); return(unionProperites); }
/// <summary> /// 注册事件 /// </summary> /// <param name="control">控件</param> private void registerEvents(FCView control) { FCTouchEvent clickButtonEvent = new FCTouchEvent(clickButton); List <FCView> controls = control.getControls(); int controlsSize = controls.Count; for (int i = 0; i < controlsSize; i++) { FCView subControl = controls[i]; FCButton button = subControl as FCButton; FCGrid grid = subControl as FCGrid; if (button != null) { button.addEvent(clickButtonEvent, FCEventID.CLICK); } else if (grid != null) { FCGridRowStyle rowStyle = new FCGridRowStyle(); grid.RowStyle = rowStyle; rowStyle.BackColor = FCColor.None; rowStyle.SelectedBackColor = FCDraw.FCCOLORS_SELECTEDROWCOLOR; rowStyle.HoveredBackColor = FCDraw.FCCOLORS_HOVEREDROWCOLOR; rowStyle.SelectedTextColor = FCDraw.FCCOLORS_TEXTCOLOR4; } registerEvents(subControl); } }
/// <summary> /// 按钮点击事件 /// </summary> /// <param name="sender">调用者</param> /// <param name="mp">坐标</param> /// <param name="button">按钮</param> /// <param name="click">点击次数</param> /// <param name="delta">滚轮滚动值</param> private void clickButton(object sender, FCTouchInfo touchInfo) { if (touchInfo.m_firstTouch && touchInfo.m_clicks == 1) { FCView control = sender as FCView; String name = control.Name; if (name == "btnCancel") { close(); } else if (name == "btnOK") { FCTextBox txtName = getTextBox("txtName"); FCTextBox txtScript = getTextBox("txtScript"); List <IndicatorData> indicatorDatas = m_mainFrame.m_indicators; IndicatorData newIndicatorData = null; //判断是否重复 int indicatorDatasSize = indicatorDatas.Count; for (int i = 0; i < indicatorDatasSize; i++) { IndicatorData indicatorData = indicatorDatas[i]; if (indicatorData.m_name == txtName.Text) { if (m_isEdit) { newIndicatorData = indicatorData; } else { MessageBox.Show("该指标名称已经存在!", "提示"); return; } } } //添加指标 if (!m_isEdit) { newIndicatorData = new IndicatorData(); indicatorDatas.Add(newIndicatorData); } newIndicatorData.m_name = txtName.Text; newIndicatorData.m_script = txtScript.Text; String path = Application.StartupPath + "\\indicators.txt"; String content = JsonConvert.SerializeObject(indicatorDatas); FCFile.write(path, content); if (!m_isEdit) { m_mainFrame.addIndicator(newIndicatorData); } close(); Native.update(); Native.invalidate(); } else if (name == "lblDelete") { m_mainFrame.removeIndicator(m_indicatorData); close(); } } }
/// <summary> /// 添加控件 /// </summary> /// <param name="control">控件</param> /// <param name="node">节点</param> public virtual void onAddControl(FCView control, XmlNode node) { m_controls.add(control); //设置事件 setEvents(node, control); m_event.callFunction(control, FCEventID.LOAD); }
/// <summary> /// 创建FCGridBand /// </summary> /// <param name="node">节点</param> /// <param name="control">控件</param> protected virtual void createBandedGridBands(XmlNode node, FCView control) { FCGridBand gridBand = control as FCGridBand; foreach (XmlNode subNode in node.ChildNodes) { FCView subControl = createControl(subNode, subNode.Name.ToLower()); FCGridBand band = subControl as FCGridBand; if (band != null) { band.Native = m_native; gridBand.AddBand(band); setAttributesBefore(subNode, band); createBandedGridBands(subNode, band); setAttributesAfter(subNode, band); onAddControl(band, subNode); } FCBandedFCGridColumn bandcolumn = subControl as FCBandedFCGridColumn; if (bandcolumn != null) { bandcolumn.Native = m_native; gridBand.AddColumn(bandcolumn); setAttributesBefore(subNode, bandcolumn); setAttributesAfter(subNode, bandcolumn); onAddControl(bandcolumn, subNode); } } }
/// <summary> /// 读取文件体 /// </summary> /// <param name="node">XML节点</param> /// <param name="control">控件</param> public virtual void readBody(XmlNode node, FCView control) { foreach (XmlNode subNode in node.ChildNodes) { readNode(subNode, control); } }
/// <summary> /// 下拉列表控件索引改变事件 /// </summary> /// <param name="sender">调用者</param> private void comboBoxSelectedIndexChanged(object sender) { if (m_xml != null) { if (!m_settingProperty) { m_settingProperty = true; FCComboBox comboBox = sender as FCComboBox; if (comboBox != null) { m_designerDiv.saveUndo(); String name = comboBox.Tag.ToString(); String value = comboBox.SelectedText; int targetsSize = m_targets.Count; for (int i = 0; i < targetsSize; i++) { FCView target = m_targets[i]; m_xml.setProperty(target, name, value); target.update(); } Native.update(); Native.invalidate(); } m_settingProperty = false; } } }
/// <summary> /// 将属性保存到XML中 /// </summary> /// <param name="control">控件</param> /// <param name="name">属性名称</param> /// <param name="value">属性值</param> public void setProperty(FCView control, String name, String value) { if (m_nodes.ContainsKey(control)) { XmlNode node = m_nodes[control]; XmlAttribute xmlAtr = null; //检查是否存在属性 foreach (XmlAttribute atr in node.Attributes) { if (atr.Name.ToLower() == name.ToLower()) { xmlAtr = atr; break; } } if (xmlAtr == null) { xmlAtr = m_xmlDoc.CreateAttribute(name.ToLower()); node.Attributes.Append(xmlAtr); } xmlAtr.Value = value; control.setProperty(name.ToLower(), value); onDocumentChanged(); } }
/// <summary> /// 创建树的节点 /// </summary> /// <param name="node">节点</param> /// <param name="control">控件</param> /// <param name="treeNode">树节点</param> protected virtual void createTreeNode(XmlNode node, FCView control, FCTreeNode treeNode) { FCTree tree = control as FCTree; if (tree != null) { FCTreeNode appendNode = new FCTreeNode(); if (treeNode == null) { tree.appendNode(appendNode); } else { treeNode.appendNode(appendNode); } setAttributesBefore(node, appendNode); foreach (XmlNode subNode in node.ChildNodes) { if (subNode.Name.ToLower() == "node") { createTreeNode(subNode, control, appendNode); } } setAttributesAfter(node, appendNode); } }
/// <summary> /// 按键抬起方法 /// </summary> /// <param name="key">按键</param> public override void onKeyUp(char key) { if (!IsDragging) { m_step = 1; base.onKeyUp(key); if (m_offsetX != 0 || m_offsetY != 0) { int targetsSize = m_targets.Count; if (targetsSize > 0) { m_designerDiv.saveUndo(); for (int i = 0; i < targetsSize; i++) { FCView target = m_targets[i]; FCPoint oldLocation = target.Location; oldLocation.x += m_offsetX; oldLocation.y += m_offsetY; m_xml.setProperty(target, "location", FCStr.convertPointToStr(oldLocation)); target.update(); } m_designerDiv.Designer.refreshProperties(); } refreshStatusBar(); Parent.invalidate(); } } m_offsetX = 0; m_offsetY = 0; }
/// <summary> /// 读取字符串,加载到控件中 /// </summary> /// <param name="xml">字符串</param> /// <param name="control">控件</param> public override void loadXml(String xml, FCView control) { if (control != null) { m_nodes.Clear(); } base.loadXml(xml, control); }
/// <summary> /// 创建树的节点 /// </summary> /// <param name="node">节点</param> /// <param name="control">控件</param> protected virtual void createTreeNodes(XmlNode node, FCView control) { foreach (XmlNode subNode in node.ChildNodes) { createTreeNode(subNode, control, null); } control.update(); }
/// <summary> /// 加载到某个控件中 /// </summary> /// <param name="skinPath">文件的路径</param> /// <param name="control">控件</param> public override void loadFile(String fileName, FCView control) { if (control != null) { m_nodes.Clear(); } base.loadFile(fileName, control); }
/// <summary> /// 读取头部 /// </summary> /// <param name="node">XML节点</param> /// <param name="control">控件</param> public override void readHead(XmlNode node, FCView control) { WinHostEx host = Native.Host as WinHostEx; if (host.LoadingDesigner) { base.readHead(node, control); } }
/// <summary> /// 创建表格行 /// </summary> /// <param name="node">节点</param> /// <param name="control">控件</param> protected virtual void createGridRows(XmlNode node, FCView control) { foreach (XmlNode node2 in node.ChildNodes) { if (node2.Name.ToLower() == "row" || node2.Name.ToLower() == "tr") { createGridRow(node2, control); } } }
/// <summary> /// 获取按钮 /// </summary> /// <param name="name">控件名称</param> /// <returns>按钮</returns> public FCButton getButton(String name) { FCView control = findControl(name); if (control != null) { return(control as FCButton); } return(null); }
/// <summary> /// 读取子节点 /// </summary> /// <param name="node">节点</param> /// <param name="control">控件</param> public virtual void readChildNodes(XmlNode node, FCView control) { if (node.ChildNodes != null && node.ChildNodes.Count > 0) { foreach (XmlNode subNode in node.ChildNodes) { readNode(subNode, control); } } }
/// <summary> /// 获取下拉控件 /// </summary> /// <param name="name">控件名称</param> /// <returns>下拉控件</returns> public FCComboBox getComboBox(String name) { FCView control = findControl(name); if (control != null) { return(control as FCComboBox); } return(null); }
/// <summary> /// 获取图层 /// </summary> /// <param name="name">控件名称</param> /// <returns>按钮</returns> public FCDiv getDiv(String name) { FCView control = findControl(name); if (control != null) { return(control as FCDiv); } return(null); }
/// <summary> /// 获取窗体 /// </summary> /// <param name="name">控件名称</param> /// <returns>窗体</returns> public FCWindow getWindow(String name) { FCView control = findControl(name); if (control != null) { return(control as FCWindow); } return(null); }
/// <summary> /// 获取图形控件 /// </summary> /// <param name="name">控件名称</param> /// <returns>复选框</returns> public FCChart getChart(String name) { FCView control = findControl(name); if (control != null) { return(control as FCChart); } return(null); }
/// <summary> /// 获取标签 /// </summary> /// <param name="name">控件名称</param> /// <returns>按钮</returns> public FCLabel getLabel(String name) { FCView control = findControl(name); if (control != null) { return(control as FCLabel); } return(null); }
/// <summary> /// 获取日期控件 /// </summary> /// <param name="name">控件名称</param> /// <returns>日期控件</returns> public FCDateTimePicker getDatePicker(String name) { FCView control = findControl(name); if (control != null) { return(control as FCDateTimePicker); } return(null); }
/// <summary> /// 获取菜单项控件 /// </summary> /// <param name="name">控件名称</param> /// <returns>菜单项控件</returns> public FCMenuItem getMenuItem(String name) { FCView control = findControl(name); if (control != null) { return(control as FCMenuItem); } return(null); }
/// <summary> /// 获取表格 /// </summary> /// <param name="name">控件名称</param> /// <returns>表格</returns> public FCGrid getGrid(String name) { FCView control = findControl(name); if (control != null) { return(control as FCGrid); } return(null); }
/// <summary> /// 获取树控件 /// </summary> /// <param name="name">控件名称</param> /// <returns>树控件</returns> public FCTree getTree(String name) { FCView control = findControl(name); if (control != null) { return(control as FCTree); } return(null); }