Esempio n. 1
0
        /// <summary>
        /// 绘制编辑文本框
        /// </summary>
        /// <param name="cell">单元格</param>
        /// <param name="paint">绘图对象</param>
        /// <param name="rect">区域</param>
        /// <param name="clipRect">裁剪区域</param>
        public override void onPaintEditTextBox(FCGridCell cell, FCPaint paint, FCRect rect, FCRect clipRect)
        {
            FCTextBox editTextBox = EditTextBox;

            if (editTextBox != null)
            {
                FCTreeNode node = cell as FCTreeNode;
                if (node != null)
                {
                    int indent = node.Indent;
                    rect.left += indent;
                    if (rect.right < rect.left)
                    {
                        rect.right = rect.left;
                    }
                    editTextBox.Bounds        = rect;
                    editTextBox.DisplayOffset = false;
                    editTextBox.bringToFront();
                }
                else
                {
                    base.onPaintEditTextBox(cell, paint, rect, clipRect);
                }
            }
        }
Esempio n. 2
0
        /// <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);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 插入节点
        /// </summary>
        /// <param name="index">索引</param>
        /// <param name="node">节点</param>
        public void insertNode(int index, FCTreeNode node)
        {
            int rowIndex = -1;

            if (index == 0)
            {
                if (node.Parent != null)
                {
                    rowIndex = node.Parent.Row.Index + 1;
                }
                else
                {
                    rowIndex = 0;
                }
            }
            else
            {
                if (m_nodes.size() > 0)
                {
                    rowIndex = m_nodes.get(index).Row.Index;
                }
            }
            node.Tree   = m_tree;
            node.Parent = this;
            node.onAddingNode(rowIndex);
            m_nodes.Insert(index, node);
        }
Esempio n. 4
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);
        }
Esempio n. 5
0
 /// <summary>
 /// 添加节点
 /// </summary>
 /// <param name="node">节点</param>
 public void appendNode(FCTreeNode node)
 {
     node.Parent = this;
     node.Tree   = m_tree;
     node.onAddingNode(-1);
     m_nodes.add(node);
 }
Esempio n. 6
0
        /// <summary>
        /// 表格选中行改变方法
        /// </summary>
        public void onGridSelectedRowsChanged()
        {
            ArrayList <FCTreeNode> selectedNodes = m_tvTypes.SelectedNodes;
            int selectedNodesSize = selectedNodes.Count;

            if (selectedNodesSize > 0)
            {
                FCTreeNode            node = selectedNodes[0];
                String                name = node.Name.Replace("node_", "");
                ArrayList <FCGridRow> rows = m_gridTemplate.m_rows;
                int rowsSize = rows.Count;
                ArrayList <FCGridRow> selectedRows = new ArrayList <FCGridRow>();
                if (name.IndexOf('_') != -1)
                {
                    String language = name.Substring(0, name.IndexOf('_'));
                    String platform = name.Substring(name.IndexOf('_') + 1);
                    for (int i = 0; i < rowsSize; i++)
                    {
                        FCGridRow row = rows[i];
                        if (row.getCell("COLT2").getString() == language &&
                            row.getCell("COLT3").getString() == platform)
                        {
                            if (selectedRows.Count == 0)
                            {
                                selectedRows.Add(row);
                            }
                            row.Visible = true;
                        }
                        else
                        {
                            row.Visible = false;
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < rowsSize; i++)
                    {
                        FCGridRow row = rows[i];
                        if (row.getCell("COLT2").getString() == name)
                        {
                            if (selectedRows.Count == 0)
                            {
                                selectedRows.Add(row);
                            }
                            row.Visible = true;
                        }
                        else
                        {
                            row.Visible = false;
                        }
                    }
                }
                m_gridTemplate.VScrollBar.Pos = 0;
                m_gridTemplate.SelectedRows   = selectedRows;
                m_gridTemplate.update();
                m_gridTemplate.invalidate();
            }
        }
Esempio n. 7
0
        /// <summary>
        /// 加载树的模板
        /// </summary>
        /// <param name="tree">树</param>
        /// <param name="node">节点</param>
        public static void TreeTemplate(FCTree tree, UIXmlEx xml, XmlNode node)
        {
            XmlDocument xmlDoc = node.OwnerDocument;

            tree.Size = new FCSize(200, 200);
            FCGridColumn column = new FCGridColumn("Column1");

            column.AllowSort = false;
            tree.addColumn(column);
            FCGridColumn column2 = new FCGridColumn("Column2");

            column2.AllowSort = false;
            tree.addColumn(column2);
            tree.update();
            FCTreeNode treeNode = new FCTreeNode();

            treeNode.Text = "Node1";
            tree.appendNode(treeNode);
            FCTreeNode subTreeNode = new FCTreeNode();

            subTreeNode.Text = "Node2";
            treeNode.appendNode(subTreeNode);
            tree.update();
            XmlNode columnsNode = xmlDoc.CreateNode(XmlNodeType.Element, "tr", "");

            node.AppendChild(columnsNode);
            XmlNode column1Node = xmlDoc.CreateNode(XmlNodeType.Element, "th", "");

            columnsNode.AppendChild(column1Node);
            XmlAttribute xmlAtr1 = xmlDoc.CreateAttribute("text");

            xmlAtr1.Value = "Column1";
            column1Node.Attributes.Append(xmlAtr1);
            XmlNode column2Node = xmlDoc.CreateNode(XmlNodeType.Element, "th", "");

            columnsNode.AppendChild(column2Node);
            XmlAttribute xmlAtr2 = xmlDoc.CreateAttribute("text");

            xmlAtr2.Value = "Column2";
            column2Node.Attributes.Append(xmlAtr2);
            XmlNode nodesNode = xmlDoc.CreateNode(XmlNodeType.Element, "nodes", "");

            node.AppendChild(nodesNode);
            XmlNode nodeNode = xmlDoc.CreateNode(XmlNodeType.Element, "node", "");

            nodesNode.AppendChild(nodeNode);
            XmlAttribute xmlAtr3 = xmlDoc.CreateAttribute("text");

            xmlAtr3.Value = "Node1";
            nodeNode.Attributes.Append(xmlAtr3);
            XmlNode subNodeNode = xmlDoc.CreateNode(XmlNodeType.Element, "node", "");

            nodeNode.AppendChild(subNodeNode);
            XmlAttribute xmlAtr4 = xmlDoc.CreateAttribute("text");

            xmlAtr4.Value = "Node2";
            subNodeNode.Attributes.Append(xmlAtr4);
        }
Esempio n. 8
0
        /// <summary>
        /// 单元格触摸抬起方法
        /// </summary>
        /// <param name="cell">单元格</param>
        /// <param name="touchInfo">触摸信息</param>
        public override void onCellTouchUp(FCGridCell cell, FCTouchInfo touchInfo)
        {
            base.onCellTouchUp(cell, touchInfo);
            FCPoint mp = touchInfo.m_firstPoint;

            if (m_movingNode != null)
            {
                FCGridRow curRow = getRow(mp);
                //移动
                if (curRow != null)
                {
                    FCTreeNode curNode = curRow.getCell(0) as FCTreeNode;
                    if (curNode.AllowDragIn && m_movingNode != curNode)
                    {
                        FCTreeNode curNodeParent    = curNode.Parent;
                        FCTreeNode movingNodeParent = m_movingNode.Parent;
                        if (movingNodeParent != null)
                        {
                            movingNodeParent.removeNode(m_movingNode);
                        }
                        else
                        {
                            removeNode(m_movingNode);
                        }
                        //有父节点
                        if (curNodeParent != null)
                        {
                            if (movingNodeParent == curNodeParent)
                            {
                                curNodeParent.insertNode(curNodeParent.getNodeIndex(curNode), m_movingNode);
                            }
                            else
                            {
                                curNode.appendNode(m_movingNode);
                            }
                        }
                        //无父节点
                        else
                        {
                            if (movingNodeParent == curNodeParent)
                            {
                                insertNode(getNodeIndex(curNode), m_movingNode);
                            }
                            else
                            {
                                curNode.appendNode(m_movingNode);
                            }
                        }
                        curNode.expend();
                    }
                }
                m_movingNode = null;
                update();
            }
        }
Esempio n. 9
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;
                }
            }
        }
Esempio n. 10
0
 /// <summary>
 /// 属性改变方法
 /// </summary>
 /// <param name="name">属性名称</param>
 /// <param name="value">属性值</param>
 public void onPropertyChanged(String name, String value)
 {
     if (name.ToLower() == "text")
     {
         List <FCGridRow> selectedRows = m_tvCollection.SelectedRows;
         int selectedRowsSize          = selectedRows.Count;
         if (selectedRowsSize > 0)
         {
             FCTreeNode node = selectedRows[0].getCell(0) as FCTreeNode;
             node.Text = value;
         }
     }
 }
Esempio n. 11
0
        /// <summary>
        /// 获取节点的索引
        /// </summary>
        /// <param name="node">节点</param>
        /// <returns>索引</returns>
        public int getNodeIndex(FCTreeNode node)
        {
            int nodeSize = m_nodes.size();

            for (int i = 0; i < nodeSize; i++)
            {
                if (m_nodes.get(i) == node)
                {
                    return(i);
                }
            }
            return(-1);
        }
Esempio n. 12
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);
                }
            }
        }
Esempio n. 13
0
 /// <summary>
 /// 显示
 /// </summary>
 public override void showDialog()
 {
     if (m_collectionName == "TabPages")
     {
         FCTabControl     tabControlA = m_target as FCTabControl;
         List <FCTabPage> tabPages    = tabControlA.getTabPages();
         int tabPagesSize             = tabPages.Count;
         for (int i = 0; i < tabPagesSize; i++)
         {
             FCTabPage  tabPage = tabPages[i];
             FCTreeNode node    = new FCTreeNode();
             node.setString(tabPage.Text);
             m_tvCollection.appendNode(node);
             node.Row.Tag = tabPage;
         }
     }
     else if (m_collectionName == "Columns")
     {
         FCGrid grid = m_target as FCGrid;
         List <FCGridColumn> columns = grid.getColumns();
         int columnsSize             = columns.Count;
         for (int i = 0; i < columnsSize; i++)
         {
             FCGridColumn column = columns[i];
             FCTreeNode   node   = new FCTreeNode();
             node.setString(column.Text);
             m_tvCollection.appendNode(node);
             node.Row.Tag = column;
         }
     }
     m_tvCollection.update();
     m_gridSelectedRowsChangedEvent = new FCEvent(gridSelectedRowsChanged);
     m_gridProperty.Xml             = m_xml;
     m_gridProperty.DesignerDiv     = m_designerDiv;
     m_tvCollection.addEvent(m_gridSelectedRowsChangedEvent, FCEventID.GRIDSELECTEDROWSCHANGED);
     if (m_tvCollection.getRows().Count > 0)
     {
         ArrayList <FCGridRow> selectedRows = new ArrayList <FCGridRow>();
         selectedRows.Add(m_tvCollection.getRow(0));
         m_tvCollection.SelectedRows = selectedRows;
     }
     base.showDialog();
 }
Esempio n. 14
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);
                }
            }
        }
Esempio n. 15
0
        /// <summary>
        /// 父节点是否可见
        /// </summary>
        /// <param name="node">节点</param>
        /// <returns>是否可见</returns>
        public bool isNodeVisible(FCTreeNode node)
        {
            FCTreeNode parentNode = node.Parent;

            if (parentNode != null)
            {
                if (!parentNode.Expended)
                {
                    return(false);
                }
                else
                {
                    return(isNodeVisible(parentNode));
                }
            }
            else
            {
                return(true);
            }
        }
Esempio n. 16
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);
                }
            }
        }
Esempio n. 17
0
 /// <summary>
 /// 移除节点
 /// </summary>
 /// <param name="node">节点</param>
 public void removeNode(FCTreeNode node)
 {
     node.onRemovingNode();
     m_nodes.remove(node);
 }
Esempio n. 18
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);
            }
        }
Esempio n. 19
0
        /// <summary>
        /// 添加类
        /// </summary>
        public void addClass()
        {
            XmlDocument xmlDoc = m_xml.XmlDoc;

            if (m_collectionName == "TabPages")
            {
                FCTabControl tabControl = m_target as FCTabControl;
                FCTabPage    tabPage    = new FCTabPage();
                tabControl.addControl(tabPage);
                String newControlName = UITemplate.CreateControlName(tabPage, m_xml);
                tabPage.Name = newControlName;
                tabPage.Text = newControlName;
                XmlNode tabControlNode = m_xml.Nodes[tabControl];
                XmlNode tabpageNode    = m_xml.XmlDoc.CreateNode(XmlNodeType.Element, "div", "");
                tabControlNode.AppendChild(tabpageNode);
                XmlAttribute xmlAtr1 = xmlDoc.CreateAttribute("name");
                xmlAtr1.Value = tabPage.Text;
                tabpageNode.Attributes.Append(xmlAtr1);
                XmlAttribute xmlAtr2 = xmlDoc.CreateAttribute("text");
                xmlAtr2.Value = tabPage.Text;
                tabpageNode.Attributes.Append(xmlAtr2);
                XmlAttribute xmlAtr3 = xmlDoc.CreateAttribute("type");
                xmlAtr3.Value = "tabpage";
                tabpageNode.Attributes.Append(xmlAtr3);
                m_xml.m_controls.Add(tabPage);
                m_xml.Nodes[tabPage] = tabpageNode;
                FCTreeNode node = new FCTreeNode();
                node.setString(tabPage.Name);
                m_tvCollection.appendNode(node);
                node.Row.Tag = tabPage;
                m_tvCollection.update();
                m_tvCollection.selectNextRow();
                tabControl.update();
            }
            else if (m_collectionName == "Columns")
            {
                FCGrid       grid   = m_target as FCGrid;
                FCGridColumn column = new FCGridColumn();
                grid.addColumn(column);
                String newControlName = UITemplate.CreateControlName(column, m_xml);
                column.Name = newControlName;
                column.Text = newControlName;
                XmlNode gridNode    = m_xml.Nodes[grid];
                XmlNode columnsNode = null;
                foreach (XmlNode subNode in gridNode.ChildNodes)
                {
                    if (subNode.Name.ToLower() == "columns" || subNode.Name.ToLower() == "tr")
                    {
                        columnsNode = subNode;
                        break;
                    }
                }
                if (columnsNode == null)
                {
                    columnsNode = xmlDoc.CreateNode(XmlNodeType.Element, "tr", "");
                    gridNode.AppendChild(columnsNode);
                }
                XmlNode columnNode = m_xml.XmlDoc.CreateNode(XmlNodeType.Element, "th", "");
                columnNode.InnerText = column.Text;
                columnsNode.AppendChild(columnNode);
                XmlAttribute xmlAtr1 = xmlDoc.CreateAttribute("name");
                xmlAtr1.Value = column.Text;
                columnNode.Attributes.Append(xmlAtr1);
                m_xml.m_controls.Add(column);
                m_xml.Nodes[column] = columnNode;
                FCTreeNode node = new FCTreeNode();
                node.setString(column.Name);
                m_tvCollection.appendNode(node);
                node.Row.Tag = column;
                grid.update();
            }
            m_tvCollection.update();
            m_tvCollection.selectNextRow();
            Native.invalidate();
            m_designerDiv.saveUndo();
        }