예제 #1
0
    /// <summary>
    /// Creates the KV item.
    /// </summary>
    /// <param name="kvType">Kv type.数据表名,kvitem属于那个tree,哪个tab,就是tabType或editorType</param>
    public string CreateKVList(string kvType)
    {
        //使用模板数据填入sql,并取回id
        //Dictionary<int,KVData> dic = GEditorConfig.GetKVTemplateData(kvType);

        string[] _defaultDate     = GEditorConfig.GetKVDefaultValueData(kvType);
        string[] _fullDefaultDate = GEditorConfig.GetFullKVDefaultValueData(kvType, _defaultDate);
        //_t[0]= "null";

        //从sql拿回id,并保存这个id
        int id = GEditorDataMgr.CreateKVSqlData(kvType, _fullDefaultDate);
        //NINFO nsql 这里3处"ID",写法不是很好,但目前是正确的,后面如果感觉不合理要修改下

        //从sql取出id为id的数据dic,这个函数还会把数据存到本地


        Dictionary <int, KVData> dic = CheckAndLoadTreeItemData2Local(id.ToString());

        dic[0].value = id.ToString();

        //Log.i("KVContainer","CreateKVItem","key:"+dic[0]);
        //KVDateDic.Add(dic[0].value,dic);

        //使用KvDic中的数据填充 itemUI prefab,刷新ui
        RefreshKVListUI(dic);
        CurTreeItemID = dic[0].value;

        Log.i("KVContainer", "CreateKVItem", "新增KVItem id:" + id, BeShowLog);

        return(id.ToString());
    }
예제 #2
0
    /// <summary>
    /// 利用剪切版里的数据新建一个Item
    /// 新建一个item
    /// 这里要注意的是创建的位置
    ///
    /// 当选择一个item并且黏贴时,是把剪切版中的item粘到这个选择item的前面
    /// 原因是如果是后面的化,那么folder下第一个位置永远不能被插入
    /// </summary>
    private void Paste()
    {
        //这里要判定黏贴板上是否有数据
        if (MyTreeContainer.CurCopyItem == null)
        {
            Log.i("TreeItem", "Paste", "黏贴的数据为null,不该出现的状态", BeShowLog);
            return;
        }

        //插入TreeItem项到指定位置
        var treeItem = InsertItem(IndexInParentFolder, MyTreeContainer.CurCopyItem.Name, ParentFolder, MyTreeContainer);

        treeItem.Icon       = MyTreeContainer.CurCopyItem.Icon;
        treeItem.TreeItemID = MyTreeContainer.CurCopyItem.TreeItemID;
        string _curCopyItemID = MyTreeContainer.CurCopyItem.TreeItemID;

        //如果数据来自剪切,就要清理原数据,如果来自复制,就要复制原数据(数据id如果不变,复制是没有意义的)

        //如果是剪切,要删除前一个状态
        if (MyTreeContainer.CurCopyItem.BeCut)
        {
            Log.i("TreeItem", "Paste", "开始黏贴", BeShowLog);
            MyTreeContainer.CurCopyItem.BeCut = false;
            MyTreeContainer.CurCopyItem.DelItem(false);
        }
        else        //如果是copy,要新生成sql数据,拿到ID,然后再插入数据
        {
            //NINFO nsql 这里是否也要向本地写数据
            //这里并不需要向本地Dic写入数据,只向sql写入数据即可,复制并没有把当前选中项置为 复制项,
            //当鼠标点击选中复制项时,选中逻辑自然会把sql数据导入本地
            Log.i("TreeItem", "Paste", "开始复制", BeShowLog);
            //step1 创建一个空的默认数据  新建sql并拿回新id
            string   kvType           = this.MyTreeContainer.Name;
            string[] _defaultDate     = GEditorConfig.GetKVDefaultValueData(kvType);
            string[] _fullDefaultDate = GEditorConfig.GetFullKVDefaultValueData(kvType, _defaultDate);

            int newID = GEditorDataMgr.CreateKVSqlData(kvType, _fullDefaultDate);
            treeItem.TreeItemID = newID.ToString();
            Log.i("TreeItem", "Paste", "新建数据完毕返回 newID:" + newID, BeShowLog);
            //step2 获取旧数据 根据treeItem.ID(被copy的那个item的sql数据id)查询copy的数据
            //string[] rowNames = GEditorConfig.GetKVRowNames(kvType);
            string[] copyDate = GEditorDataMgr.QueryKVSqlData(kvType /*,rowNames*/, Convert.ToInt32(_curCopyItemID));

            //step3 向新建的空位置添加旧数据,id使用新id
            copyDate[1] = newID.ToString();            //特别注意这里是第一个元素,不是第0个,可以参考SQLiteHelper4DataEditor的说明

            string[] Col_Names_InSql = SQLiteHelper4DataEditor.Get_Col_Names_InSql(kvType);
            GEditorDataMgr.ModifyKVSqlData(kvType, Col_Names_InSql, copyDate, newID);
        }

        //黏贴要要清理黏贴版,这里暂时逻辑为无论剪切还是复制,每到黏贴时都要清空剪贴板
        MyTreeContainer.CurCopyItem = null;

        Log.i("TreeItem", "Paste", "黏贴的item ID:" + treeItem.TreeItemID, BeShowLog);
    }
예제 #3
0
    /// <summary>
    /// 这里的黏贴是treeItme的黏贴,不存在文件夹整体黏贴的说法
    /// treefolder的黏贴跟TreeItem有些不同(除了这些不同其他都相同,跟treeitem paste的操作类似)
    /// treeItem是把黏贴项放到自己之前
    /// treefoler是把黏贴项放到自己内部所有元素之后
    /// </summary>
    public void Paste()
    {
        //这里要判定黏贴板上是否有数据
        if (MyTreeContainer.CurCopyItem == null)
        {
            Log.i("TreeItem", "Paste", "黏贴的数据为null,不该出现的状态", BeShowLog);
            return;
        }

        if (!BeFolderOpen)
        {
            OpenFolder();               //没打开的先打开再创建,否则位置错乱
        }
        //创建新位置的item的ui,ui节点名称与黏贴板上的一致
        var ti = TreeItem.Create(MyTreeContainer.CurCopyItem.Name, this, MyTreeContainer);

        //如果是剪切,要删除前一个状态
        if (MyTreeContainer.CurCopyItem.BeCut)
        {
            Log.i("TreeItem", "Paste", "开始黏贴", BeShowLog);
            MyTreeContainer.CurCopyItem.BeCut = false;
            MyTreeContainer.CurCopyItem.DelItem(false);
            ti.TreeItemID = MyTreeContainer.CurCopyItem.TreeItemID;//黏贴的话id保持不变
        }
        else//如果是copy,要新生成sql数据,拿到ID,然后再插入数据
        {
            //step1 创建一个空的默认数据  新建sql并拿回新id
            string   kvType           = this.MyTreeContainer.Name;
            string[] _defaultDate     = GEditorConfig.GetKVDefaultValueData(kvType);
            string[] _fullDefaultDate = GEditorConfig.GetFullKVDefaultValueData(kvType, _defaultDate);
            int      newID            = GEditorDataMgr.CreateKVSqlData(kvType, _fullDefaultDate);

            ti.TreeItemID = newID.ToString();
            Log.i("TreeFolder", "Paste", "新建数据完毕返回 newID:" + newID, BeShowLog);
            //step2 获取旧数据 根据treeItem.ID(被copy的那个item的sql数据id)查询copy的数据
            //string[] rowNames = GEditorConfig.GetKVRowNames(kvType);
            string[] copyDate = GEditorDataMgr.QueryKVSqlData(kvType /*,rowNames*/, Convert.ToInt32(MyTreeContainer.CurCopyItem.TreeItemID));

            //step3 向新建的空位置添加旧数据,id使用新id
            copyDate[1] = newID.ToString();//特别注意这里是第一个元素,不是第0个,可以参考SQLiteHelper4DataEditor的说明

            string[] Col_Names_InSql = SQLiteHelper4DataEditor.Get_Col_Names_InSql(kvType);

            GEditorDataMgr.ModifyKVSqlData(kvType, Col_Names_InSql, copyDate, newID);
        }
        //黏贴要要清理黏贴版,这里暂时逻辑为无论剪切还是复制,每到黏贴时都要请客剪贴板
        MyTreeContainer.CurCopyItem = null;

        Log.i("TreeItem", "Paste", "黏贴的item ID:" + ti.TreeItemID, BeShowLog);
    }
예제 #4
0
    /// <summary>
    /// 生成单个Tab页的GameData
    /// </summary>
    public static void GenerateGameData(string editorType)
    {
        //初始化缓存
        //ioBuffer4GameData = new IoBuffer();

        //获取某个tab的TreeContainer
        TreeContainer _treeContainer = GEditorRoot.GetIns().TreeContainerDic[editorType];
        //获取某个tab的KvContainer
        KVContainer _kvContainer = GEditorRoot.GetIns().KVContainerDic [editorType];

        //得到一个treeContainer下所有的treeItem信息
        TreeItemData[] itemData = _treeContainer.GetAllTreeItemData();

        //确保所有的treeItem数据都被(从sql)拉取到本地
        for (int i = 0; i < itemData.Length; i++)
        {
            string _treeItemID = itemData[i].TreeItemID;
            _kvContainer.CheckAndLoadTreeItemData2Local(_treeItemID);
        }

        //开始过滤并,返回过滤后要存储的二进制数据
        byte[] bs = GEditorConfig.FilterData(editorType, _kvContainer.KVDateDic);

        if (null == bs)
        {
            Debug.Log("未导出 editorType:" + editorType + " 原因数据为null");
            return;
        }
        //Debug.Log("TExportData------->bs.len:"+bs.Length);
        //ioBuffer4GameData.PutString(editorType);//存储tab名
        //ioBuffer4GameData.PutInt(_treeContainer.RootFolder.SubAllItemNums);//存储当前tab下数据总条数

        //递归存储一个treeItem下的所有gdata
        //SaveOneTreeItemData(_treeContainer.RootFolder,editorType);

        //NINFO 对存储到ioBuffer4GameData中的数据进行冗余过滤

        FileHelper.Save(GEditorEnum.EDITOR_GAME_DATA_ROOTURL, editorType + GEditorEnum.EDITOR_GAME_DATA_NAME, bs /*ioBuffer4GameData.ToArray()*/);

        //ioBuffer4GameData.Clear();

        //ioBuffer4GameData = null;
    }
예제 #5
0
    public void InitContentDropdown(string type)
    {
        //清理掉原来存储的数据
        if (null != ContentDropdownDataDic)
        {
            ContentDropdownDataDic.Clear();
            ContentDropdownDataDic = null;
        }

        //如果类型是自定义类型,说明需要手动输入,不需要从列表选择,把列表选择项隐藏即可
        if (type.Equals(GEditorConfig.DROPDOWN_TYPE_custom))
        {
            ContentDropdown.gameObject.SetActive(false);
            return;
        }
        else
        {
            ContentDropdown.gameObject.SetActive(true);
        }


        //重新获取dropdown数据
        ContentDropdownDataDic = GEditorConfig.GetContentDropdownDataList(EditorType, type);

        if (null != ContentDropdownDataDic && ContentDropdownDataDic.Count > 0)
        {
            //先清空
            ContentDropdown.ClearOptions();

            //填充数据
            foreach (KeyValuePair <string, string> p in ContentDropdownDataDic)
            {
                Dropdown.OptionData op = new Dropdown.OptionData();
                op.text = p.Key;
                ContentDropdown.options.Add(op);
            }
        }
        else
        {
            Log.i("KVDataModifyDialog", "InitContentDropdown", "初始化contentDropdown时数据为null或数据条数小于0", BeShowLog);
        }
    }