Esempio n. 1
0
    /// <summary>
    /// 新建,黏贴插入操作
    /// </summary>
    /// <param name="index">Index.</param>
    /// <param name="itemName">Item name.</param>
    /// <param name="parentFolder">Parent folder.</param>
    /// <param name="menuList">Menu list.</param>
    private TreeItem InsertItem(int index, string itemName, TreeFolder parentFolder, TreeContainer menuList)
    {
        //实例化文件夹
        GameObject go = GameObject.Instantiate(Resources.Load("Prefabs/TreeItem")) as GameObject;

        go.name = itemName;
        TreeItem item = go.GetComponent <TreeItem>();

        item.MyTreeContainer = menuList;
        item.BeFolder        = false;
        item.Name            = itemName;
        go.transform.SetParent(parentFolder.SubRootRectTransform as Transform);
        item._RectTransform           = go.GetComponent <RectTransform>();
        item._RectTransform.pivot     = new Vector2(0, 1);
        item._RectTransform.anchorMax = new Vector2(0, 1);
        item._RectTransform.anchorMin = new Vector2(0, 1);

        item.ItemNameText.text     = itemName;
        item.ItemNameText.fontSize = UIEnum.FontSize;
        var   textRt = item.ItemNameText.gameObject.GetComponent <RectTransform>();
        float w      = Tools.GetStringW(item.ItemNameText.text, UIEnum.FontSize);

        textRt.sizeDelta = new Vector2(w, UIEnum.ItmeH);

        //重新设置下Folder的边框宽度
        float w1 = UIEnum.ItemImageW + w;

        item._RectTransform.sizeDelta = new Vector2(w1, UIEnum.ItemH);

        item.ParentFolder = parentFolder;

        //这里这句还是要注意点,文件夹和item混合插入应该会出问题,不过目前没这种需求
        float h = (index + 1) * UIEnum.ItemH;

        item._RectTransform.anchoredPosition = new Vector2(UIEnum.FolderBtnW * 2 + 4, -h);
        item.CreateMenu(item);

        parentFolder.ItemList.Insert(index, item);
        parentFolder.RefreshItemNum();
        //新建文件夹后通知上级进行重新排序,比如rootFolder下有10个subFolder,在第二个subFolder下新建,那么后面所有subFolder都要重排
        //这里注意下ui坐标系是左下是0,0所以负值是向下移动
        parentFolder.ParentYOrder(-UIEnum.ItemH, index);

        return(item);
    }
Esempio n. 2
0
    /// <summary>
    /// 删除item
    /// </summary>
    /// <param name="bDelData">true删除数据+treeitem节点,false只删节点,不删除本地及sql数据,剪切时用后者</param>
    public void DelItem(bool bDelData = false)
    {
        if (bDelData)
        {
            GEditorRoot.GetIns().KVContainerDic[MyTreeContainer.Name].DelKVListData(TreeItemID);
            GEditorRoot.GetIns().KVContainerDic[MyTreeContainer.Name].ClearKVListUI();//删除时清空当前kvcontainer的显示,否则item已经删除,但是kv上还显示数据就很奇怪了
        }

        Log.i("TreeItem", "DelItem", "删除TreeItem id:" + TreeItemID, BeShowLog);

        //先做删除文件夹后的排序
        ParentFolder.ParentYOrder(UIEnum.ItemH, IndexInParentFolder);
        //然后把folder从父类ListItem中去掉
        ParentFolder.ItemList.Remove(this);
        //再删除folder节点
        Destroy(gameObject);
        ParentFolder.RefreshItemNum();
    }
Esempio n. 3
0
    /// <summary>
    /// 创建子文件夹
    /// 不需要加入xy偏移量,因为这个偏移量是固定的
    /// </summary>
    /// <param name="name">Name.</param>
    /// <param name="parentTrm">Parent trm.</param>
    public static TreeFolder CreateSubFolder(string folderName, TreeFolder parentFolder, TreeContainer menuList)
    {
        //添加文件夹时,如果父文件夹没有打开,先打开再添加
        if (!parentFolder.BeFolderOpen)
        {
            parentFolder.BeFolderOpen = true;
        }

        var folder = TreeFolder.Create(folderName, parentFolder.SubRootRectTransform, menuList);

        folder.ParentFolder = parentFolder;
        folder.BeRootFolder = false;

        //这里计算的是相对父folder的位置
        //float h = (parentFolder.SubItemNums + 1) * MenuListFolder.FolderH;
        float h = parentFolder.CurFolderH;

        folder._RectTransform.anchoredPosition = new Vector2(UIEnum.FolderBtnW, -h);
        folder.CreateMenu(folder);
        parentFolder.ItemList.Add(folder);

        //新建文件夹后通知上级进行重新排序,比如rootFolder下有10个subFolder,在第二个subFolder下新建,那么后面所有subFolder都要重排
        //这里注意下ui坐标系是左下是0,0所以负值是向下移动
        parentFolder.ParentYOrder(-UIEnum.FolderH, folder.IndexInParentFolder);


        //刷新下MenuList的边框宽,用于刷新MenuList滚动区域,item距离Menulist左边距离+两个图标间隔+4(文字和图标间隔)+w1(文字长度)
        if (!folder.BeRootFolder)
        {
            var   textRt = folder.ItemNameText.gameObject.GetComponent <RectTransform>();
            float w      = Tools.GetStringW(folder.ItemNameText.text, UIEnum.FontSize);
            float w1     = UIEnum.FolderBtnW + UIEnum.FolderImageW + w;
            float _w     = folder.CurItemLeftOffset + UIEnum.ItemImageW * 2 + 4 + w1;
            menuList.SetTreeW(_w);
            menuList.RefreshTreeArea();
        }

        return(folder);
    }
Esempio n. 4
0
    /// <summary>
    /// 这个方法只有从folder右键创建item时调用
    /// 其他地方用InsertItem
    /// </summary>
    /// <param name="itemName">Item name.</param>
    /// <param name="parentFolder">Parent folder.</param>
    /// <param name="menuList">Menu list.</param>
    public static TreeItem Create(string itemName, TreeFolder parentFolder, TreeContainer treeContainer)
    {
        //添加文件夹时,如果父文件夹没有打开,先打开再添加
        if (!parentFolder.BeFolderOpen)
        {
            parentFolder.BeFolderOpen = true;
        }

        //实例化文件夹
        GameObject go = GameObject.Instantiate(Resources.Load("Prefabs/TreeItem")) as GameObject;

        go.name = itemName;
        TreeItem item = go.GetComponent <TreeItem>();

        item.MyTreeContainer = treeContainer;
        item.BeFolder        = false;
        item.Name            = itemName;
        go.transform.SetParent(parentFolder.SubRootRectTransform as Transform);
        item._RectTransform           = go.GetComponent <RectTransform>();
        item._RectTransform.pivot     = new Vector2(0, 1);
        item._RectTransform.anchorMax = new Vector2(0, 1);
        item._RectTransform.anchorMin = new Vector2(0, 1);

        item.ItemNameText.text     = itemName;
        item.ItemNameText.fontSize = UIEnum.FontSize;
        var   textRt = item.ItemNameText.gameObject.GetComponent <RectTransform>();
        float w      = Tools.GetStringW(item.ItemNameText.text, UIEnum.FontSize);

        textRt.sizeDelta = new Vector2(w, UIEnum.ItmeH);

        //重新设置下Folder的边框宽度
        float w1 = UIEnum.ItemImageW + w;

        item._RectTransform.sizeDelta = new Vector2(w1, UIEnum.ItemH);

        item.ParentFolder = parentFolder;

        //float h = (parentFolder.SubItemNums + 1) * UIEnum.ItemH;
        float h = parentFolder.CurFolderH;

        //float h = parentFolder.CurFolderH;
        item._RectTransform.anchoredPosition = new Vector2(UIEnum.FolderBtnW * 2 + 4, -h);
        item.CreateMenu(item);

        parentFolder.ItemList.Add(item);
        parentFolder.RefreshItemNum();


        //新建文件夹后通知上级进行重新排序,比如rootFolder下有10个subFolder,在第二个subFolder下新建,那么后面所有subFolder都要重排
        //这里注意下ui坐标系是左下是0,0所以负值是向下移动
        parentFolder.ParentYOrder(-UIEnum.ItemH, item.IndexInParentFolder);


        //刷新下MenuList的边框宽,用于刷新MenuList滚动区域,item距离Menulist左边距离+一个图标间隔+4(文字和图标间隔)+w1(文字长度)
        float _w = item.CurItemLeftOffset + UIEnum.ItemImageW + 4 + w1;

        treeContainer.SetTreeW(_w);
        treeContainer.RefreshTreeArea();

        return(item);
    }