Exemple #1
0
        /// <summary>
        /// 获取最后节点的索引
        /// </summary>
        /// <param name="nodes">节点</param>
        /// <returns>索引</returns>
        protected FCTreeNode getLastNode(ArrayList <FCTreeNode> nodes)
        {
            int size = nodes.size();

            if (size > 0)
            {
                for (int i = size - 1; i >= 0; i--)
                {
                    FCTreeNode lastNode = nodes.get(i);
                    if (lastNode.Row != null)
                    {
                        ArrayList <FCTreeNode> childNodes  = lastNode.getChildNodes();
                        FCTreeNode             subLastNode = getLastNode(childNodes);
                        if (subLastNode != null)
                        {
                            return(subLastNode);
                        }
                        else
                        {
                            return(lastNode);
                        }
                    }
                }
            }
            return(null);
        }
Exemple #2
0
        /// <summary>
        /// 单元格触摸按下方法
        /// </summary>
        /// <param name="cell">单元格</param>
        /// <param name="touchInfo">触摸信息</param>
        public override void onCellTouchDown(FCGridCell cell, FCTouchInfo touchInfo)
        {
            base.onCellTouchDown(cell, touchInfo);
            FCPoint    mp   = touchInfo.m_firstPoint;
            FCTreeNode node = cell as FCTreeNode;

            if (node != null)
            {
                int          scrollH    = 0;
                FCHScrollBar hscrollBar = HScrollBar;
                if (hscrollBar != null && hscrollBar.Visible)
                {
                    scrollH = hscrollBar.Pos;
                }
                FCRect headerRect = node.TargetColumn.Bounds;
                headerRect.left += HorizontalOffset - scrollH;
                headerRect.top  += VerticalOffset - scrollH;
                int left = headerRect.left;
                //复选框
                if (m_checkBoxes)
                {
                    int cw = m_checkBoxSize.cx;
                    if (mp.x >= left && mp.x <= left + cw)
                    {
                        node.Checked = !node.Checked;
                        return;
                    }
                    left += cw + 10;
                }
                //折叠节点
                ArrayList <FCTreeNode> childNodes = node.getChildNodes();
                if (childNodes != null && childNodes.size() > 0)
                {
                    int nw = m_nodeSize.cx;
                    if (mp.x >= left && mp.x <= left + nw)
                    {
                        if (node.Expended)
                        {
                            node.collapse();
                        }
                        else
                        {
                            node.expend();
                        }
                        update();
                        return;
                    }
                }
                //移动
                if (node.AllowDragOut)
                {
                    m_movingNode = node;
                }
            }
        }
Exemple #3
0
        /// <summary>
        /// 选中所有子节点
        /// </summary>
        /// <param name="nodes">节点集合</param>
        /// <param name="isChecked">是否选中</param>
        protected void checkChildNodes(ArrayList <FCTreeNode> nodes, bool isChecked)
        {
            int nodeSize = m_nodes.size();

            for (int i = 0; i < nodeSize; i++)
            {
                FCTreeNode node = nodes.get(i);
                node.Checked = isChecked;
                ArrayList <FCTreeNode> childNodes = node.getChildNodes();
                if (childNodes != null && childNodes.size() > 0)
                {
                    checkChildNodes(childNodes, isChecked);
                }
            }
        }
Exemple #4
0
        /// <summary>
        /// 折叠子节点
        /// </summary>
        /// <param name="nodes">节点集合</param>
        /// <param name="expendAll">是否折叠儿子节点</param>
        protected void collapseChildNodes(ArrayList <FCTreeNode> nodes, bool collapseAll)
        {
            int nodeSize = nodes.size();

            for (int i = 0; i < nodeSize; i++)
            {
                FCTreeNode node = nodes.get(i);
                if (collapseAll)
                {
                    node.Expended = false;
                }
                node.Row.Visible = false;
                ArrayList <FCTreeNode> childNodes = node.getChildNodes();
                if (childNodes != null && childNodes.size() > 0)
                {
                    collapseChildNodes(childNodes, collapseAll);
                }
            }
        }
Exemple #5
0
        /// <summary>
        /// 展开所有的节点
        /// </summary>
        /// <param name="nodes">节点集合</param>
        /// <param name="parentExpened">父节点是否展开</param>
        /// <param name="expendAll">儿子节点是否展开</param>
        protected void expendChildNodes(ArrayList <FCTreeNode> nodes, bool parentExpened, bool expendAll)
        {
            int nodeSize = nodes.size();

            for (int i = 0; i < nodeSize; i++)
            {
                FCTreeNode node      = nodes.get(i);
                bool       pExpended = parentExpened;
                if (expendAll)
                {
                    pExpended        = true;
                    node.Row.Visible = true;
                    node.Expended    = true;
                }
                else
                {
                    if (parentExpened)
                    {
                        node.Row.Visible = true;
                    }
                    else
                    {
                        node.Row.Visible = false;
                    }
                    if (!node.Expended)
                    {
                        pExpended = false;
                    }
                }
                ArrayList <FCTreeNode> childNodes = node.getChildNodes();
                if (childNodes != null && childNodes.size() > 0)
                {
                    expendChildNodes(childNodes, pExpended, expendAll);
                }
            }
        }
Exemple #6
0
        /// <summary>
        /// 添加节点
        /// </summary>
        /// <param name="index">行索引</param>
        public virtual void onAddingNode(int index)
        {
            FCGridRow row = Row;

            if (Row == null)
            {
                //创建行
                row = new FCGridRow();
                FCTreeNode parentNode = m_parent;
                if (parentNode == null)
                {
                    if (index != -1)
                    {
                        //插入行
                        m_tree.insertRow(index, row);
                        //重置行的索引
                        ArrayList <FCGridRow> rows = m_tree.getRows();
                        int rowSize = rows.size();
                        for (int i = 0; i < rowSize; i++)
                        {
                            rows.get(i).Index = i;
                        }
                    }
                    else
                    {
                        //添加行
                        m_tree.addRow(row);
                        //设置索引
                        ArrayList <FCGridRow> rows = m_tree.getRows();
                        row.Index = rows.size() - 1;
                    }
                    row.addCell(0, this);
                    m_targetColumn = m_tree.getColumn(0);
                }
                else
                {
                    //获取行索引
                    int rowIndex = parentNode.Row.Index + 1;
                    if (index != -1)
                    {
                        rowIndex = index;
                    }
                    else
                    {
                        //查找上个节点
                        FCTreeNode lastNode = getLastNode(parentNode.getChildNodes());
                        if (lastNode != null)
                        {
                            if (lastNode.Row == null)
                            {
                                return;
                            }
                            rowIndex = lastNode.Row.Index + 1;
                        }
                    }
                    //插入行
                    m_tree.insertRow(rowIndex, row);
                    ArrayList <FCGridRow> rows = m_tree.getRows();
                    int rowSize = rows.size();
                    //重置索引
                    if (rowIndex == rowSize - 1)
                    {
                        row.Index = rowIndex;
                    }
                    else
                    {
                        for (int i = 0; i < rowSize; i++)
                        {
                            rows.get(i).Index = i;
                        }
                    }
                    row.addCell(0, this);
                    m_targetColumn = m_tree.getColumn(parentNode.m_targetColumn.Index + 1);
                }
                ColSpan = m_tree.getColumns().size();
                //添加子节点
                if (m_nodes != null && m_nodes.size() > 0)
                {
                    int nodeSize = m_nodes.size();
                    for (int i = 0; i < nodeSize; i++)
                    {
                        m_nodes.get(i).onAddingNode(-1);
                    }
                }
                row.Visible = isNodeVisible(this);
            }
        }