Ejemplo n.º 1
0
        /// <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));
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 根据节点ID找到对应节点
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public TmpltBaseTreeNode GetElementNode(string id)
        {
            TmpltBaseTreeNode elementNode = null;

            _dicNodeIndexs.TryGetValue(id, out elementNode);
            return(elementNode);
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        /// <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;
            }
        }
Ejemplo n.º 5
0
        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();
            }
        }
Ejemplo n.º 6
0
        //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();
                }
            }
        }
Ejemplo n.º 7
0
 /// <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);
         }
     }
 }
Ejemplo n.º 8
0
        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);
                }
            }
        }
Ejemplo n.º 9
0
 /// <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);
         }
     }
 }
Ejemplo n.º 10
0
        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);
                }
            }
        }
Ejemplo n.º 11
0
        /// <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);
                }
            }
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
        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
        }
Ejemplo n.º 15
0
        /// <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;
            }
        }
Ejemplo n.º 16
0
 /// <summary>
 /// 添加Node到Nodes集合的方法。为使我们能在添加时做一些统一的处理,
 /// 所有的节点添加必须使用此方法,若派生类重写此方法,必须最终调用base.AddChildNode
 /// </summary>
 public int AddChildNode(TmpltBaseTreeNode node)
 {
     return(AddChildNode(-1, node));
 }
Ejemplo n.º 17
0
 /// <summary>
 /// 重新加载树上单个节点数据
 /// </summary>
 /// <param name="treeNode"></param>
 /// <param name="anyXmlElement"></param>
 private void RepeatLoadSingleNodeData(TmpltBaseTreeNode treeNode, AnyXmlElement anyXmlElement)
 {//模板和页面片的单个节点刷新 即保存时调用,保存是才通知模板树
 }
Ejemplo n.º 18
0
 /// <summary>
 /// 对节点的TITLE重新赋值
 /// </summary>
 /// <param name="node"></param>
 public abstract void RenewNodeText(TmpltBaseTreeNode node);
Ejemplo n.º 19
0
 public override void RenewNodeText(TmpltBaseTreeNode node)
 {
 }
Ejemplo n.º 20
0
 public override void RenewNodeText(TmpltBaseTreeNode node)
 {
     this.Text = AbsoluteFileName;
 }