/// <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()); }
/// <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); }
/// <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); }