Пример #1
0
    void Update()
    {
        //点击任意空白位置,弹出菜单消失
        if (Input.GetMouseButtonDown(0))
        {
            if (null == Menu.CurMenu)
            {
                return;
            }
            bool b = RectTransformUtility.RectangleContainsScreenPoint(Menu.CurMenu._RectTransform, new Vector2(Input.mousePosition.x, Input.mousePosition.y));

            if (!b)
            {
                Menu.CurMenu.Hide();
            }
        }

        //正常运行的情况下这段不起作用
        if (Input.GetKeyUp(KeyCode.LeftAlt) /*&& Input.GetKeyUp (KeyCode.F4)*/)
        {
            GEditorDataMgr.SaveEditorData();

            GEditorDataMgr.CloseSql();

            Application.Quit();

            Log.i("编辑器正常关闭");
        }
    }
Пример #2
0
    /// <summary>
    /// 修改本地的一条kv数据,包括本地数据,及sql中的存储数据
    /// </summary>
    /// <param name="treeItemID">Tree item I.</param>
    /// <param name="index">这个kvdata数据在sql同时也是在数据dic中的index(kvdata.key在sql中的顺序位置)</param>
    /// <param name="key">Key.</param>
    /// <param name="value">Value.</param>
    /// <param name="type">数据编辑类型,或打开窗口类型</param>
    public void ModifyKVItem(string treeItemID, int index, string key, string value, string type)
    {
        //修改本地数据-------------------------------------
        if (KVDateDic.ContainsKey(treeItemID))
        {
            KVDateDic [treeItemID] [index].key   = key;
            KVDateDic [treeItemID] [index].value = value;
            KVDateDic [treeItemID] [index].type  = type;
        }
        else
        {
            //说明,这个函数OnDialogReturnValue是打开某一项TreeItem后再点击其中的KvItem才执行的,所以不可能出现在KVContainer中找不到当前TreeItem数据的情况
            Log.e("KVListItem", "OnDialogReturnValue", "KVContainer中不包含当前打开的dialog所处理的treeItem  TreeItemID:" + treeItemID, BeShowLog);
        }

        //修改sql数据-------------------------------------
        int    key_offset_inSql   = 0;
        int    _index             = (index * 3 + key_offset_inSql);
        string key_col_name_inSql = "line" + _index;        //这里这么写的原因可以参考SQLitHelper中对数据库设计的说明

        int value_offset_inSql = 1;

        _index = (index * 3 + value_offset_inSql);
        string value_col_name_inSql = "line" + _index;        //这里这么写的原因可以参考SQLitHelper中对数据库设计的说明

        int type_offset_inSql = 2;

        _index = (index * 3 + type_offset_inSql);
        string type_col_name_inSql = "line" + _index;        //这里这么写的原因可以参考SQLitHelper中对数据库设计的说明

        GEditorDataMgr.ModifyKVSqlData(Name, new string[] { key_col_name_inSql, value_col_name_inSql, type_col_name_inSql }, new string[] { key, value, type }, Convert.ToInt32(treeItemID));

        //修改ui,这里稍微有点浪费效率,整体都重新刷新了一便,但是不用重新开发功能,就这样
        RefreshKVListUI(KVDateDic[treeItemID]);
    }
Пример #3
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());
    }
Пример #4
0
    public void CreateMenu(TreeFolder menuListFolder)
    {
        if (null != FolderRightMenu)
        {
            return;
        }
        Dictionary <string, Listener> dic = new Dictionary <string, Listener> ();

        dic.Add("创建文件夹", menuListFolder.AddFolder);
        if (!BeRootFolder)
        {
            dic.Add("删除文件夹", menuListFolder.DelFolder);
        }
        else
        {
            Listener callback = () => {
                GEditorDataMgr.GenerateGameData(Name);
            };

            dic.Add("导出" + Name + "数据", callback);
        }
        dic.Add("创建文件", menuListFolder.AddItem);
        dic.Add("重命名", menuListFolder.ReName);
        dic.Add("黏贴", menuListFolder.Paste);
        FolderRightMenu = Menu.Generate(dic, "FolderMenu");
        FolderRightMenu.ItemDic["黏贴"].interactable = false;//默认禁用黏贴
    }
Пример #5
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);
    }
Пример #6
0
    /// <summary>
    /// 要删除的item的ID
    /// </summary>
    /// <param name="ID"></param>
    public void DelKVListData(string ID)
    {
        //删本地数据
        KVDateDic.Remove(ID);

        int id = Convert.ToInt32(ID);

        //删sql数据
        GEditorDataMgr.DelKVSqlData(Name, id);

        Log.i("KVContainer", "DelKVItem", "删除KVItem id:" + id, BeShowLog);
    }
Пример #7
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);
    }
Пример #8
0
    /// <summary>
    /// 检测本地是否存在TreeItmeID的数据,
    /// 不存在就去sql中查找,并存到本地,返回找到的这个treeItem的数据
    /// 存在就直接返回
    public Dictionary <int, KVData> CheckAndLoadTreeItemData2Local(string TreeItemID)
    {
        //根据TreeItem.ID判断本地是否有对应的Kvitem的数据,如果有就直接填充数据
        bool b = BeKVListDataCache(TreeItemID);

        Dictionary <int, KVData> kvDic = null;

        if (b)        //如果有缓存就从缓存刷新数据
        {
            Log.i("KVContainer", "RefreshKVList", "从本地缓存刷数据 ID:" + TreeItemID, BeShowLog);

            kvDic = GetLocaCacheKVListData(TreeItemID);
//			if (beRefreshUI) {
//				RefreshKVListUI(GetLocaCacheKVListData(TreeItemID));
//				CurTreeItemID = TreeItemID;
//			}
        }
        else        //如果没有就使用TreeItem.ID从sql查询读取,并缓存到本地
        {
            Log.i("KVContainer", "RefreshKVList", "从sql查询获取数据 ID:" + TreeItemID, BeShowLog);
            //这里要把不同tab的row刷出来填进去
            int _id = Convert.ToInt32(TreeItemID);
            //string[] rowNames = GEditorConfig.GetKVRowNames(Name);
            //string[] openType = GEditorConfig.GetKVRowOpenType(Name);
            //这里查询结果要存到本地缓存,这里查询到的是某个id的数据
            string[] queryResult = GEditorDataMgr.QueryKVSqlData(Name /*, rowNames*/, _id);

            kvDic = new Dictionary <int, KVData>();
            for (int i = 0, j = 0; i < queryResult.Length; i += 3, j++)       //nafio nsql
            {
                KVData kvdata = new KVData();
                kvdata.key   = queryResult [i];
                kvdata.value = queryResult[i + 1];
                kvdata.type  = queryResult[i + 2];
                kvDic.Add(j, kvdata);
                //Log.i("KVContainer","RefreshKVList","从sql向本地填充queryResult["+i+"]->key:"+kvdata.key+" value:"+kvdata.value+" type:"+kvdata.type);
            }

            KVDateDic.Add(TreeItemID, kvDic);
        }

//		if (beRefreshUI){
//			RefreshKVListUI(kvDic);
//			CurTreeItemID = TreeItemID;
//		}

        return(kvDic);
    }
Пример #9
0
    /// <summary>
    /// 编辑器初始化,重要流程
    /// </summary>
    private void InitGEditor()
    {
        //创建Tab管理器
        TabContainer = new TabContainer(TabContainer.TabLayoutType.horizontal, TabPanel);
        TabContainer.TabSelectEvent   = OnTabSelect;
        TabContainer.TabDeSelectEvent = OnTabDeSelect;

        //创建Tree管理器
        if (null == TreeContainerDic)
        {
            TreeContainerDic = new Dictionary <string, TreeContainer> ();
        }

        //创建列表管理器
        if (null == KVContainerDic)
        {
            KVContainerDic = new Dictionary <string, KVContainer>();
        }

        //加载tab数据,根据数据创建打开tab
        //检测是否存在tab.config配置文件,如果没有,就使用默认打开项目(GEditorEnum.OPENED_EDITORS)
        string tabCfgPath     = GEditorEnum.EDITOR_DATA_ROOTURL + GEditorEnum.EDITOR_TAB_CONFIG_NAME;
        bool   beTabCfgExists = FileHelper.BeFileExists(tabCfgPath);

        //VLog.I("tabCfgPaht:"+tabCfgPath+" beExis:"+beTabCfgExists);
        string[,] _CurOpenedTabs = null;
        if (beTabCfgExists)
        {
            _CurOpenedTabs = GEditorDataMgr.LoadTabConfig(tabCfgPath);                        //非首次,使用tab.config中记录的数据
        }
        else
        {
            _CurOpenedTabs = GEditorEnum.OPENED_EDITORS;         //首次打开,不存tab.config相关记录,使用默认打开tab页
        }
        for (int i = 0; i < _CurOpenedTabs.GetLength(0); i++)
        {
            //根据数创建tab项
            TabData tabData = new TabData();
            tabData.Name    = _CurOpenedTabs[i, 0];
            tabData.RefName = _CurOpenedTabs[i, 1];
            tabData.Index   = i;

            var tabItem = TabItem.Create(tabData, TabPanel, TabContainer);
            TabContainer.Add(tabItem);

            //根据现有打开的tab,创建对应的tree项
            string        treeCfgPath        = GEditorEnum.EDITOR_DATA_ROOTURL + GEditorEnum.EDITOR_TREE_CONFIG_NAME + tabData.RefName + ".config";
            bool          beTreeConfigExists = FileHelper.BeFileExists(treeCfgPath);
            TreeContainer treeContainer      = new TreeContainer();
            if (beTreeConfigExists)            //treeConfig配表存在,从配表载入TreeContainer
            {
                byte[] bs = GEditorDataMgr.LoadOneTreeConfig(treeCfgPath);
                treeContainer.CreateByData(tabData.RefName, TreePanel, TreePanel, 0, 0, bs);
                TreeContainerDic.Add(tabData.RefName, treeContainer);
            }
            else            //treeConfig配表不存在存在,创建新的根节点
            {
                treeContainer.Create(tabData.RefName, TreePanel, TreePanel, 0, 0);
                TreeContainerDic.Add(tabData.RefName, treeContainer);
            }
            treeContainer.Hide();            //创建完先隐藏,等等具体tab被选中时才显示


            //设置tabitem初始选中状态,这句需要放在TreeContainer被创建之后,
            //因为Beselect一旦被执行,就会执行切换TreeContainer的操作,如果TreeContainer还没被创建,就会出错
            if (i == 0)
            {
                tabItem.BeSelecte = true;
            }
            else
            {
                tabItem.BeSelecte = false;
            }


            //创建KVContainer,打开几个tab创建几个,跟tree类似
            KVContainerDic.Add(tabData.RefName, new KVContainer(KeyValuePanel, KeyPanel, ValuePanel, tabData.RefName));
        }

        //打开数据库,保持长连接
        GEditorDataMgr.ConnectSql();

        //判定是否是首次打开editor,如果是创建sql table,并创建首次打开标示文件app.config
        GEditorDataMgr.CheckSQLTableExist();
    }
Пример #10
0
 void OnDestroy()
 {
     GEditorDataMgr.SaveEditorData();
     GEditorDataMgr.CloseSql();
     Ins = null;
 }
Пример #11
0
    void Update()
    {
//		if (Input.GetKeyUp (KeyCode.B)) {
//			sql.OpenConnection("data source= data/sqlite4unity.db");
//			sql.BeTableExist ("table1");
//			sql.CloseConnection();
//		}

        if (Input.GetKeyUp(KeyCode.S))
        {
            Debug.Log("Start");
            sql = SQLiteHelper.GetIns();
            sql.OpenConnection("data source= data/test.db");
        }

        if (Input.GetKeyUp(KeyCode.T))
        {
            //创建名为table1的数据表
            sql.CreateTable("table1", new string[] { "ID", "Name", "Email" }, new string[] { "INTEGER PRIMARY KEY", "TEXT", "TEXT" });
        }


        if (Input.GetKeyUp(KeyCode.N))
        {
            Debug.Log("End");
            sql.CloseConnection();
        }


        //测试新增一条数据
        if (Input.GetKeyUp(KeyCode.C))
        {
            Debug.Log("Create");

            string s = "name3333333";

            GEditorDataMgr.CreateKVSqlData("table1", new string[] { "null", s, "*****@*****.**" });
        }

        //测试查询
        if (Input.GetKeyUp(KeyCode.Q))
        {
            Debug.Log("Query");
            //GEditorDataMgr.QueryKVSqlData("table1",new string[]{"ID","Name","Email"},1);
        }

        //测试修改
        if (Input.GetKeyUp(KeyCode.M))
        {
            Debug.Log("Motify");
            GEditorDataMgr.ModifyKVSqlData("table1", new string[] { "Name" }, new string[] { "'f**k'" }, 1);
        }

        //测试删除
        if (Input.GetKeyUp(KeyCode.D))
        {
            Debug.Log("Del");
            GEditorDataMgr.DelKVSqlData("table1", 1);
        }

        //测试copy
//		if(Input.GetKeyUp(KeyCode.P))
//		{
//			Debug.Log ("Copy");
//			string s = "INSERT INTO table1 SELECT * FROM table1";
//			SQLiteHelper.GetIns ().ExecuteQuery (s);
//		}
    }
Пример #12
0
 private void OnGenerateAllClick()
 {
     Debug.Log("generateAll date Click");
     GEditorDataMgr.GenerateAllGameData();
 }