Ejemplo n.º 1
0
    private void onUINodeToggleChange(object sender, NodeToggleChangeEventArgs e)
    {
        UIElement element = e.Node.DataKey as UIElement;

        if (element != null)
        {
            m_layout_mng.CurEditLayout.SetDirty();
            CmdManager.Instance.AddCmd(new UITreeNodePropChangeCmd(element, e.Node, e.Toggle, m_layout_mng.CurEditLayout));
        }
    }
Ejemplo n.º 2
0
    private void onLayoutNodeToggleChange(object sender, NodeToggleChangeEventArgs e)
    {
        int index = (int)e.Node.DataKey;

        switch (e.Toggle)
        {
        case "可见":
            if (m_layout_mng.CurEditLayoutIndex == index)
            {
                Debug.Log("处于编辑状态的layout不可设置为不可见!");
                e.Cancel = true;
            }
            else
            {
                m_layout_mng.SetLayoutVisible(index, e.Node.ToggleList["可见"]);
                RequestRepaint();
                //CmdManager.Instance.AddCmd(new LayoutTreeNodeVisibleChangeCmd(index, e.Node, m_layout_mng));
            }
            break;

        case "编辑":
            if (m_layout_mng.CurEditLayoutIndex == index)
            {
                e.Cancel = true;
            }
            else
            {
                if (m_layout_mng.CurEditLayout.Dirty)
                {
                    switch (EditorUtility.DisplayDialogComplex("", "当前编辑的layout已被修改,是否保存?", "是", "否", " 取消"))
                    {
                    // 是
                    case 0:
                        Layout cur_layout = m_layout_mng.CurEditLayout;
                        if (cur_layout != null)
                        {
                            cur_layout.Save();
                        }
                        ClearUndos();
                        m_layout_mng.SetLayoutVisible(index, true);
                        m_layout_mng.SetCurEditLayout(index);
                        ResetLayoutTree();
                        ResetUITree();

                        RequestRepaint();
                        break;

                    // 否
                    case 1:
                        ClearUndos();

                        m_layout_mng.CurEditLayout.Reload();
                        m_layout_mng.SetLayoutVisible(index, true);
                        m_layout_mng.SetCurEditLayout(index);
                        ResetLayoutTree();
                        ResetUITree();

                        RequestRepaint();
                        break;

                    // 取消
                    case 2:
                        e.Cancel = true;
                        break;

                    default:
                        break;
                    }
                }
                else
                {
                    m_layout_mng.SetCurEditLayout(index);
                    m_layout_mng.SetLayoutVisible(index, true);
                    ResetLayoutTree();
                    ResetUITree();

                    RequestRepaint();
                }
            }
            break;

        default:
            break;
        }
    }
Ejemplo n.º 3
0
    private void DrawNode(TreeNode node)
    {
        if (node == null)
        {
            return;
        }

        GUIStyle foldoutStyle = null;
        GUIStyle labelStyle   = null;

        if (!node.UseDefaultColor)
        {
            foldoutStyle = node.FoldoutStyle;
            labelStyle   = node.LabelStyle;
        }
        else
        {
            foldoutStyle = _foldoutStyle;
            labelStyle   = _labelStyle;
        }

        if (node.selected)
        {
            GUILayout.BeginHorizontal(_marginStyle);
        }
        else
        {
            GUILayout.BeginHorizontal();
        }


        bool childrenAllHide = true;

        foreach (TreeNode child in node.Children)
        {
            if (!child.Hide)
            {
                childrenAllHide = false;
                break;
            }
        }

        bool showAsLabel = node.Children.Count == 0 || (HideFoldOutWhenAllChildrenHide && childrenAllHide);

        GUILayout.Space(showAsLabel ? 12 + 16 * node.getLayerLevel() : 16 * node.getLayerLevel());

        if (showAsLabel)
        {
            EditorGUILayout.LabelField(node.NodeName, labelStyle, GUILayout.Width(labelStyle.CalcSize(new GUIContent(node.NodeName)).x));
        }
        else
        {
            node.Foldout = EditorGUILayout.Foldout(node.Foldout, node.NodeName, foldoutStyle);
        }

        if (Event.current.type == EventType.repaint)
        {
            node.x = GUILayoutUtility.GetLastRect().x + (node.Children.Count == 0 ? 0 : 12);
        }

        GUILayout.FlexibleSpace();

        if (Event.current.type == EventType.repaint)
        {
            node.xMax = GUILayoutUtility.GetLastRect().width + GUILayoutUtility.GetLastRect().x;
        }

        if (node.ToggleList != null && node.ToggleList.Count > 0)
        {
            List <string> toggles = new List <string>();
            foreach (string toggleName in node.ToggleList.Keys)
            {
                toggles.Add(toggleName);
            }
            foreach (string toggleName in toggles)
            {
                bool b = node.ToggleList[toggleName];
                node.ToggleList[toggleName] = GUILayout.Toggle(b, toggleName, _toggleStyle);

                NodeToggleChangeEventArgs arg = new NodeToggleChangeEventArgs(node, toggleName);
                if (b != node.ToggleList[toggleName] && OnNodeToggleChange != null)
                {
                    OnNodeToggleChange(this, arg);
                    if (arg.Cancel)
                    {
                        node.ToggleList[toggleName] = b;
                    }
                }
            }
        }

        if (Event.current.type == EventType.repaint)
        {
            node.y = GUILayoutUtility.GetLastRect().y;
        }
        if (Event.current.type == EventType.repaint)
        {
            node.yMax = GUILayoutUtility.GetLastRect().yMax;
        }

        bool inThisNode = Event.current.mousePosition.x < node.xMax && Event.current.mousePosition.y <= node.yMax && Event.current.mousePosition.y >= node.y;

        if (findNodeToScroll && !hasFoundNodeToScroll && nodeToScroll.Contains(node))
        {
            hasFoundNodeToScroll = true;
            yToScroll            = node.y;
        }

        if (!multiSelEnd && leftDown && node.selected && Event.current.type == EventType.repaint && shiftDown && !mutilSelectDown)
        {
            if (!inShiftSelRange)
            {
                inShiftSelRange = true;
            }
            else
            {
                foreach (TreeNode n in multiSelCache)
                {
                    n.selected = true;
                    if (selectChangeDic.ContainsKey(n))
                    {
                        selectChangeDic.Remove(n);
                    }
                    else
                    {
                        selectChangeDic.Add(n, true);
                    }
                }
                multiSelCache.Clear();
            }
        }
        else if (!inThisNode && !multiSelEnd && leftDown && inShiftSelRange && !mutilSelectDown && shiftDown && Event.current.type == EventType.repaint)
        {
            if (!node.selected)
            {
                multiSelCache.Add(node);
            }
        }

        if (!inThisNode && multiSelEnd && inShiftSelRange && leftDown && /*node == lastSelNode*/ node.selected && Event.current.type == EventType.repaint && shiftDown && !mutilSelectDown)
        {
            if (selectChangeDic.ContainsKey(node))
            {
                selectChangeDic[node] = false;
            }
            else
            {
                selectChangeDic.Add(node, false);
            }
        }

        if ((leftDown || rightUp) && inThisNode && Event.current.type == EventType.repaint)
        {
            if (!ctrlDown && !shiftDown)
            {
                singleSelectNode(node);
            }
            else if (!mutilSelectDown && ctrlDown)
            {
                multiSelectNode(node);
            }
            else if (!mutilSelectDown && shiftDown && !multiSelEnd)
            {
                if (!node.selected)
                {
                    multiSelCache.Add(node);
                }

                if (inShiftSelRange)
                {
                    multiSelEnd = true;

                    foreach (TreeNode n in multiSelCache)
                    {
                        n.selected = true;
                        if (selectChangeDic.ContainsKey(n))
                        {
                            selectChangeDic.Remove(n);
                        }
                        else
                        {
                            selectChangeDic.Add(n, true);
                        }
                    }
                    multiSelCache.Clear();
                }
                else
                {
                    inShiftSelRange = true;
                }
            }

            if (!shiftDown)
            {
                curNode = node;
            }

            if (leftDown && nodeToRenameList.Contains(node) && Event.current.mousePosition.x > node.x && !ctrlDown && !shiftDown)
            {
                nodeToRename = node;
            }
        }
        if (rightUp && inThisNode)
        {
            menuNode = node;
        }
        if (leftUp && curNode != null)
        {
            if (inThisNode)
            {
                dragDestNode = node;
            }
        }

        GUILayout.EndHorizontal();

        if (node.Foldout)
        {
            foreach (TreeNode subNode in node.Children)
            {
                if (!subNode.Hide)
                {
                    DrawNode(subNode);
                }
            }
        }
    }