/// <summary> /// 修改NODE显示的TEXT /// </summary> /// <param name="strNewText"></param> public virtual void ChangeNodeText(string strNewText) {//对节点重命名暂时仅支持页面片的重命名! TmpltBaseTreeNode tmpltBaseTreeNode = this; //找到对应的模板1 while (!(tmpltBaseTreeNode is TmpltElementNode)) { tmpltBaseTreeNode = (TmpltBaseTreeNode)tmpltBaseTreeNode.Parent; } TmpltSimpleExXmlElement tmpltElement = tmpltBaseTreeNode.Element as TmpltSimpleExXmlElement; //得到对应的模板文件DOC TmpltXmlDocument tmpltDocument = tmpltElement.GetIndexXmlDocument(); if (this is SnipElementNode) { SnipXmlElement snipElement = ((this as SnipElementNode).Element) as SnipXmlElement; snipElement.SnipName = strNewText; //通知页面设计器,更改FORM的TEXT string[] strArray = new string[2]; strArray[0] = snipElement.Id; strArray[1] = strNewText; SdsiteXmlDocument.OnSnipDesignerFormTextChange(new EventArgs <string[]>(strArray)); } }
/// <summary> /// 根据节点ID找到对应节点 /// </summary> /// <param name="id"></param> /// <returns></returns> public TmpltBaseTreeNode GetElementNode(string id) { TmpltBaseTreeNode elementNode = null; _dicNodeIndexs.TryGetValue(id, out elementNode); return(elementNode); }
private void GetOpenItems(TmpltBaseTreeNode treeNode, List <string> _openItems) { if (treeNode == null) { return; } foreach (TreeNode treenode in treeNode.Nodes) { TmpltBaseTreeNode node = treenode as TmpltBaseTreeNode; if (node != null && node.IsExpanded) { if (node is PartElementNode) { SnipPartXmlElement snipPartElement = ((TmpltBaseTreeNode)node).Element as SnipPartXmlElement; _openItems.Add(snipPartElement.SnipPartId); } else if (node is SnipElementNode) { SnipXmlElement snipElement = ((TmpltBaseTreeNode)node).Element as SnipXmlElement; _openItems.Add(snipElement.Id); } else if (node is TmpltElementNode) { TmpltSimpleExXmlElement tmpltElement = ((TmpltBaseTreeNode)node).Element as TmpltSimpleExXmlElement; _openItems.Add(tmpltElement.Id); } } GetOpenItems(node, _openItems); } }
/// <summary> /// 保存对应值 /// </summary> /// <param name="elementNode"></param> public void SetElementNode(TmpltBaseTreeNode elementNode) {//因为基类没有ID属性,分开赋值 string strNodeIndex = ""; //模板文件 if (elementNode is TmpltElementNode) { strNodeIndex = ((TmpltSimpleExXmlElement)elementNode.Element).Id; } else if (elementNode is SnipElementNode) {//页面片 strNodeIndex = ((SnipXmlElement)elementNode.Element).Id; } else if (elementNode is PartElementNode) {//PART strNodeIndex = ((SnipPartXmlElement)elementNode.Element).SnipPartId; } else if (elementNode is FolderElementNode) {//文件夹 strNodeIndex = ((FolderXmlElement)elementNode.Element).Id; } if (strNodeIndex != "" && !_dicNodeIndexs.ContainsKey(strNodeIndex)) { _dicNodeIndexs[strNodeIndex] = elementNode; } }
private void sdsite_SnipDel(object sender, EventArgs <SnipXmlElement> e) { TmpltBaseTreeNode tmpltNode; if (_dicNodeIndexs.TryGetValue(e.Item.Id, out tmpltNode)) { this.BeginUpdate(); TmpltBaseTreeNode tmpltParentNode = (TmpltBaseTreeNode)tmpltNode.Parent; tmpltNode.RemoveChildNode(tmpltNode); tmpltParentNode.SetNoChildNodesText(); this.EndUpdate(); //ResetDicNodeIndexs(); } }
//protected override void OnBeforeLabelEdit(NodeLabelEditEventArgs e) //{ // TmpltBaseTreeNode tn = this.CurrentNode as TmpltBaseTreeNode; // if (tn == null || !(tn is SnipElementNode)) // { // e.CancelEdit = true; // } // else // { // viewedLabel = e.Node.Text; // } //} //protected override void OnAfterLabelEdit(NodeLabelEditEventArgs e) //{//重命名得通知页面模板设计器的TITLE // if (string.IsNullOrEmpty(e.Label)) // { // e.CancelEdit = true; // return; // } // if (viewedLabel.Equals(e.Label)) return; //如果和原来的相同,则不处理返回 // TmpltBaseTreeNode tmpltBaseTreeNode = e.Node as TmpltBaseTreeNode; // if (!tmpltBaseTreeNode.BrotherNodeRepeatName(e.Label)) // { // tmpltBaseTreeNode.ChangeNodeText(e.Label); // } // else // { // e.CancelEdit = true; // MessageService.Show("文件名重复或不合法!", MessageBoxButtons.OK, MessageBoxIcon.Error); // return; // } //} /// <summary> /// 重命名 /// </summary> public void RenameNode() {//现在仅支持页面片重命名 TmpltBaseTreeNode tn = (TmpltBaseTreeNode)this.CurrentNode; if (tn != null && tn is SnipElementNode) //仅支持页面片重命名 { NodeLabelEditEventArgs e = new NodeLabelEditEventArgs(tn); base.OnBeforeLabelEdit(e); if (!e.CancelEdit) { this.LabelEdit = true; tn.BeginEdit(); } } }
/// <summary> /// 重命名模板文件夹 /// </summary> /// <param name="anyNode"></param> private void RenewFloderText(XmlNodeList anyNode) { foreach (XmlNode node in anyNode) { if (node is FolderXmlElement) { RenewFloderText(node.ChildNodes); } else if (node is TmpltSimpleExXmlElement) { TmpltSimpleExXmlElement tmpltElement = node as TmpltSimpleExXmlElement; TmpltBaseTreeNode tmpltBaseNode = GetElementNode(tmpltElement.Id); tmpltBaseNode.RenewNodeText(tmpltBaseNode); } } }
private void sdsite_ElementTitleChanged(object sender, ChangeTitleEventArgs e) { //如果命名的对象为 模板 或者为模板文件夹 TmpltBaseTreeNode node = this.GetElementNode(e.Item.Id); if (node != null) { //_dicNodeIndexsz中的内容 只包含,模板文件夹下的问价夹,和模板文件,及其下的页面片和PART if (node is FolderElementNode) //是模板下的文件夹 { RenewFloderText(node.Element.ChildNodes); } else if (node is TmpltElementNode)//模板文件 (现在 仅支持模板文件 重命名) { node.RenewNodeText(node); } } }
/// <summary> /// 删除的是整个文件夹 /// </summary> /// <param name="anyNode"></param> private void RemoveTmpltTreeNode(XmlNodeList anyNode) { foreach (XmlNode node in anyNode) { if (node is FolderXmlElement) { RemoveTmpltTreeNode(node.ChildNodes); RemoveElementNode((node as FolderXmlElement).Id); } else if (node is TmpltSimpleExXmlElement) { TmpltSimpleExXmlElement tmpltElement = node as TmpltSimpleExXmlElement; TmpltBaseTreeNode tmpltBaseNode = GetElementNode(tmpltElement.Id); tmpltBaseNode.RemoveChildNode(tmpltBaseNode); } } }
private void sdsite_ElementDeleted(object sender, EventArgs <SimpleExIndexXmlElement> e) { ///先找原节点并删除 ///比较麻烦 如果删除整个文件夹 或者该文件夹有一个模板,删了后 该节点也删除 elementNode 没有存文件夹的ID TmpltBaseTreeNode node = this.GetElementNode(e.Item.Id); if (node != null) { //_dicNodeIndexsz中的内容 只包含,模板文件夹下的问价夹,和模板文件,及其下的页面片和PART if (node is FolderElementNode) //是模板下的文件夹 { RemoveTmpltTreeNode(node.Element.ChildNodes); } else//模板文件,页面片,PART { node.RemoveChildNode(node); } } }
/// <summary> /// 元素的移动 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void sdsite_ElementMoved(object sender, EventArgs <SimpleExIndexXmlElement> e) {//移动涉及到 Part的移动暂时不做 //所有的模板都是一级显示,因此如果是模板的移动只是改下名,(但最好将其位置也改变一下,显示层次关系) //(该事件在剪切的时候触发,并且模板视图能很好相应 但拖动导致的移动尚未处理) TmpltBaseTreeNode node = this.GetElementNode(e.Item.Id); if (node != null) { //_dicNodeIndexsz中的内容 只包含,模板文件夹下的问价夹,和模板文件,及其下的页面片和PART if (node is FolderElementNode) //是模板下的文件夹 { RenewFloderText(node.Element.ChildNodes); } else if (node is TmpltElementNode)//模板文件 { node.RenewNodeText(node); } } }
public virtual void AddElementNode(AnyXmlElement Element, TmpltTreeNodeType NodeFilterType) { TmpltBaseTreeNode tmpltBase = null; if (Element is SnipXmlElement) { tmpltBase = new SnipElementNode(Element as SnipXmlElement); if ((NodeFilterType != TmpltTreeNodeType.none) && NodeFilterType != tmpltBase.CurrentNodeType) { return; } } else if (Element is SnipPartXmlElement) { tmpltBase = new PartElementNode(Element as SnipPartXmlElement); } AddChildNode(tmpltBase); tmpltBase.LoadData(NodeFilterType); }
public virtual int AddChildNode(int index, TmpltBaseTreeNode node) { int result = index; ///先添加到节点中 if (index == -1) { result = this.Nodes.Add(node); } else { this.Nodes.Insert(index, node); } ///设置图标 // node.SelectedImageKey = node.ImageKey = node.FactImageKey; //if()//什么样的节点需要添加 { TreeView.SetElementNode(node); } return(result); }
public virtual void RemoveChildNode(TmpltBaseTreeNode node) { while (node.Nodes.Count > 0) { if (node.Nodes.Count == 1 && !(node.FirstNode is TmpltBaseTreeNode)) { break; } if (node.FirstNode is TmpltBaseTreeNode) { this.RemoveChildNode((TmpltBaseTreeNode)node.FirstNode); } } string Id = ""; //模板文件 (如果删除的是模板文件,且在模板视图中未展开过,即没有子节点,则该节点直接删除) if (node is TmpltElementNode) { Id = ((TmpltSimpleExXmlElement)node.Element).Id; } else if (node is SnipElementNode) {//页面片 Id = ((SnipXmlElement)node.Element).Id; } else if (node is PartElementNode) {//PART Id = ((SnipPartXmlElement)node.Element).SnipPartId; } /////从ElementNode的容器中删除 TreeView.RemoveElementNode(Id); ((TreeNode)node).Remove(); ///关闭当前节点打开的Form 在模板视图中,不能删除和重命名 所以不用关闭对应FORM }
/// <summary> /// 定位到模板/页面片/PART /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void TmpltTreeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { TmpltBaseTreeNode tmpltBaseNode = e.Node as TmpltBaseTreeNode; if (tmpltBaseNode == null) { return; } switch (tmpltBaseNode.NodeType) { case TreeNodeType.Tmplt: //打开(或激活)模板 Service.Workbench.OpenWorkDocument(WorkDocumentType.TmpltDesigner, ((TmpltSimpleExXmlElement)tmpltBaseNode.Element).Id); break; case TreeNodeType.Snip: { //打开页面片 //得到对应的页面片 SnipElementNode snipElementNode = tmpltBaseNode as SnipElementNode; SnipXmlElement snipElement = snipElementNode.Element as SnipXmlElement; //得到页面片所属的模板文件 TmpltElementNode tmpltElementNode = snipElementNode.Parent as TmpltElementNode; TmpltSimpleExXmlElement tmpltElement = tmpltElementNode.Element as TmpltSimpleExXmlElement; //先打开(或激活)对应的模板 如果该模板已经打开,不用打开也不用激活她,因为目的是为了打开页面片 //如果打开的话回出现令人烦的闪烁现象 if (!Service.Workbench.GetResultKeyID(WorkDocumentType.TmpltDesigner, tmpltElement.Id)) { Service.Workbench.OpenWorkDocument(WorkDocumentType.TmpltDesigner, tmpltElement.Id); } //打开(激活)页面片 Service.Workbench.OpenWorkDocument(WorkDocumentType.SnipDesigner, snipElement.Id, tmpltElement.Id); //因为如果添加一个页面片且没有保存,再重命名,新的名不能保存,模板里没有对应的内容 //所以的通知页面片设计器,将FORM的TEXT进行修改 snipElementNode.ChangeNodeText(e.Node.Text); } break; case TreeNodeType.SnipPart: { //找到PART对应的页面片 PartElementNode partElemetNode = tmpltBaseNode as PartElementNode; SnipPartXmlElement snipPartElement = partElemetNode.Element as SnipPartXmlElement; TmpltBaseTreeNode tmpltNode = (TmpltBaseTreeNode)partElemetNode; while (!(tmpltNode is SnipElementNode)) { tmpltNode = (TmpltBaseTreeNode)(tmpltNode.Parent); } //得到对应的页面片 SnipElementNode snipElementNode = tmpltNode as SnipElementNode; SnipXmlElement snipElement = snipElementNode.Element as SnipXmlElement; ////得到页面片所属的模板文件 TmpltElementNode tmpltElementNode = snipElementNode.Parent as TmpltElementNode; TmpltSimpleExXmlElement tmpltElement = tmpltElementNode.Element as TmpltSimpleExXmlElement; //先打开(或激活)对应的模板 if (!Service.Workbench.GetResultKeyID(WorkDocumentType.TmpltDesigner, tmpltElement.Id)) { Service.Workbench.OpenWorkDocument(WorkDocumentType.TmpltDesigner, tmpltElement.Id); } //打开页面片! Service.Workbench.OpenWorkDocument(WorkDocumentType.SnipDesigner, snipElement.Id, tmpltElement.Id); string [] strArray = new string[2]; strArray[0] = snipElement.Id; strArray[1] = snipPartElement.SnipPartId; SdsiteXmlDocument.OnOrientationPart(new EventArgs <string[]>(strArray)); } break; } }
/// <summary> /// 添加Node到Nodes集合的方法。为使我们能在添加时做一些统一的处理, /// 所有的节点添加必须使用此方法,若派生类重写此方法,必须最终调用base.AddChildNode /// </summary> public int AddChildNode(TmpltBaseTreeNode node) { return(AddChildNode(-1, node)); }
/// <summary> /// 重新加载树上单个节点数据 /// </summary> /// <param name="treeNode"></param> /// <param name="anyXmlElement"></param> private void RepeatLoadSingleNodeData(TmpltBaseTreeNode treeNode, AnyXmlElement anyXmlElement) {//模板和页面片的单个节点刷新 即保存时调用,保存是才通知模板树 }
/// <summary> /// 对节点的TITLE重新赋值 /// </summary> /// <param name="node"></param> public abstract void RenewNodeText(TmpltBaseTreeNode node);
public override void RenewNodeText(TmpltBaseTreeNode node) { }
public override void RenewNodeText(TmpltBaseTreeNode node) { this.Text = AbsoluteFileName; }