//***********************************************************************
    public void Set_Element_Active(int id)
    {
        curElmID = id;
        string name = CreateNameByID(id);

        tmptxt_elm_preview.text = "";


        if (goElements.transform.childCount > 0)
        {
            foreach (Transform gElm in goElements.transform)
            {
                Button     btn = gElm.GetComponent <Button>();
                ColorBlock cb  = btn.colors;
                if (gElm.name == name)
                {
                    cb.normalColor = selectedColor;
                    btn.colors     = cb;
                    btn.tag        = "btn_selected";
                    JsonSkillsTreeNode nodeElm = getElmNodeByID(id);
                    tmptxt_elm_preview.text = nodeElm.full_desc;
                }
                else
                {
                    cb.normalColor = normalColor;
                    btn.colors     = cb;
                    btn.tag        = "btn_not_selected";
                };
            }
        }
    }
    //****************************************************************
    //создание одной ноды типа JsonSkillsTreeNode
    public static JsonSkillsTreeNode create_one_node(
        int id              = 0,                   //ид-ноды
        int parent_id       = 0,                   //ид-родительской ноды
        int is_category     = 1,                   //1=если категория
        string name         = "имя",               //название ноды
        string short_desc   = "короткое описание", //короткое описание
        string full_desc    = "полный текст",      //подробное описание ноды (текст)
        int sort            = 0,                   //индекс сортировки среди "собратьев"
        string image        = "",                  //путь к спрайту в ресурсах
        string requirements = ""                   //json-строк требований
        )
    {
        JsonSkillsTreeNode node = new JsonSkillsTreeNode();

        node.id           = id;
        node.parent_id    = parent_id;
        node.is_category  = is_category;
        node.name         = name;
        node.short_desc   = short_desc;
        node.full_desc    = full_desc;
        node.sort         = sort;
        node.image        = image;
        node.requirements = requirements;
        return(node);
    }
    //****************************************************************
    //добавление/правка одного элемента
    public static int addEditElement(JsonSkillsTreeNode newNode)
    {
        int new_id = 0;

        if (newNode.id > 0)
        {
            new_id = newNode.id;
            int i = elmsList.IndexOf(elmsList.Find(n => n.id == newNode.id));
            if (i > 0)
            {
                elmsList[i] = newNode;
            }
            else
            {
                throw new Exception("Елемент с данным id=" + newNode.id + " не найден");
            }
        }
        else
        {
            new_id = newNode.id = getNextID();
            elmsList.Add(newNode);
        }
        SortElements();
        //Save(ListsToArray());
        return(new_id);
    }
    //****************************************************************
    //добавление/правка одной категории
    public static int addEditCategory(JsonSkillsTreeNode newNode)
    {
        int new_id = 0;

        if (newNode.id > 0)
        {
            new_id = newNode.id;
            int i = catList.IndexOf(catList.Find(n => n.id == newNode.id));
            if (i >= 0)
            {
                catList[i] = newNode;
            }
            else
            {
                throw new Exception("Категория с данным id=" + newNode.id + " не найдена");
            }
        }
        else
        {
            new_id = newNode.id = getNextID();
            catList.Add(newNode);
        }
        SortCategories();
        //Save(ListsToArray());
        return(new_id);
    }
    //****************************************************************
    //функция обратная ArrayToLists()  заполнение массива из списков (категории и элементы)
    public static JsonSkillsTreeNode[] ListsToArray()
    {
        JsonSkillsTreeNode[] skillsArray = new JsonSkillsTreeNode[catList.Count + elmsList.Count];
        int n = 0;

        foreach (JsonSkillsTreeNode cat in catList)
        {
            skillsArray[n] = cat;
            n++;
        }
        foreach (JsonSkillsTreeNode elm in elmsList)
        {
            skillsArray[n] = elm;
            n++;
        }
        return(skillsArray);
    }
示例#6
0
    //***********************************************************************
    //  TESTS
    //***********************************************************************

    void test_save_json_skill_tre()
    {
        JsonSkillsTreeNode[] skills = new JsonSkillsTreeNode[10];
        skills[0] = SkillsTreeFile.create_one_node(1, 0, 1, "Категория 1", "кор. описание к1", "полное описание к1");
        skills[1] = SkillsTreeFile.create_one_node(2, 0, 1, "Категория 2", "кор. описание к2", "полное описание к2");
        skills[2] = SkillsTreeFile.create_one_node(3, 1, 1, "Категория 1.1", "кор. описание к1.1", "полное описание к1.1");
        skills[3] = SkillsTreeFile.create_one_node(4, 1, 1, "Категория 1.2", "кор. описание к1.2", "полное описание к1.2");

        skills[4] = SkillsTreeFile.create_one_node(5, 3, 0, "Элемент 1.1.1", "кор. описание 1.1.1", "полное описание 1.1.1");
        skills[5] = SkillsTreeFile.create_one_node(6, 3, 0, "Элемент 1.1.2", "кор. описание 1.1.2", "полное описание 1.1.2");

        skills[6] = SkillsTreeFile.create_one_node(7, 2, 1, "Категория 2.1", "кор. описание к2.1", "полное описание к2.1");
        skills[7] = SkillsTreeFile.create_one_node(8, 2, 1, "Категория 2.2", "кор. описание к2.2", "полное описание к2.2");


        skills[8] = SkillsTreeFile.create_one_node(9, 7, 0, "Элемент 2.1.1", "кор. описание 2.1.1", "полное описание 2.1.1");
        skills[9] = SkillsTreeFile.create_one_node(10, 7, 0, "Элемент 2.1.2", "кор. описание 2.1.2", "полное описание 2.1.2");

        SkillsTreeFile.SaveOtherNodes(skills);
    }
示例#7
0
    //***********************************************************************
    //кнопка сохранить
    public void btn_Save_FormCategory()
    {
        // 1 получение данных с формы в node
        JsonSkillsTreeNode formNode = new JsonSkillsTreeNode();
        //поле родитель
        TMP_Dropdown popup_parent_dropdown = pnl_form.transform.Find("pnl_parent").GetComponentInChildren <TMP_Dropdown>();
        string       tmp = popup_parent_dropdown.captionText.text;

        formNode.parent_id = myUtils.SplitStringAndGetFromIndx(tmp, new char[] { ':' }, 0);

        //поле тип
        Toggle[] togls = pnl_form.transform.Find("pnl_type").GetComponentsInChildren <Toggle>();
        formNode.is_category = togls[0].isOn ? 1 : 0;
        //поле: сортировка
        TMP_InputField tmptxt = pnl_form.transform.Find("pnl_sort").GetComponentInChildren <TMP_InputField>();

        Int32.TryParse(tmptxt.text, out formNode.sort);

        //поле: название
        tmptxt        = pnl_form.transform.Find("pnl_name").GetComponentInChildren <TMP_InputField>();
        formNode.name = tmptxt.text;

        //поле: изображение
        tmptxt         = pnl_form.transform.Find("pnl_image").GetComponentInChildren <TMP_InputField>();
        formNode.image = tmptxt.text;

        //поле: короткое описание
        tmptxt = pnl_form.transform.Find("pnl_small_desc").GetComponentInChildren <TMP_InputField>();
        formNode.short_desc = tmptxt.text;

        //поле: полное описание
        tmptxt             = pnl_form.transform.Find("pnl_full_desc").GetComponentInChildren <TMP_InputField>();
        formNode.full_desc = tmptxt.text;

        Debug.Log(formNode);

        List <String> Errors = new List <string>();

        //2 проверка не пустые ли данные
        if (formNode.is_category != 1)
        {
            Errors.Add("Тип ноды должен быть категория.");
        }
        if (formNode.name.Length < 5)
        {
            Errors.Add("Название должно быть не меньше 5 символов.");
        }
        if (formNode.short_desc.Length < 10 || formNode.full_desc.Length < 10)
        {
            Errors.Add("Описание (короткое или полное) должно быть не меньше 10 символов.");
        }

        //Errors.Add("Тестовая ошибка какая-то еще какой-то текст плюс еще какой-то текст и еще текст.");

        if (Errors.Count > 0)
        {
            //найдены ошибки - показ сообщения об этом
            MessageBox.ShowMessage(() => { }, string.Join("\n", Errors.ToArray()));
        }
        else
        {
            //все ок сохранение данных и закрытие формы
            pnl_popups_backfon.SetActive(false);


            if (popup_is_new == 1)
            {
                formNode.id = 0;
            }
            else
            {
                formNode.id = curCatID;
            }
            curCatID = SkillsTreeFile.addEditCategory(formNode);
            //обновление списка и графа
            refresh_all();
        }
    }
示例#8
0
    //***********************************************************************
    //кнопка добавить/редактировать, is_new=1 если добавление, иначе редактирование текущей
    public void btn_AddEdit_Category(int is_new = 0)
    {
        popup_is_new = is_new;
        //открытие попапа
        pnl_popups_backfon.SetActive(true);
        JsonSkillsTreeNode curNode = get_CatNodeByID(curCatID);

        popup_caption.text = "Добавление новой категории";
        if (is_new != 1)
        {
            popup_caption.text = "Редактирование категории [" + curCatID.ToString() + "]";
        }

        //поле: родительская категория
        //заполнение дроп-списка в попапе, только корневыми категориями
        TMP_Dropdown  popup_parent_dropdown = pnl_form.transform.Find("pnl_parent").GetComponentInChildren <TMP_Dropdown>();
        List <string> opts = new List <string>();

        opts.Add("0: корень");
        int opt_indx = 0, //для выбора опции в drop-списке
            n        = 1; //для исчисления родителей

        foreach (JsonSkillsTreeNode node in catList)
        {
            if (node.parent_id == 0)
            {
                opts.Add(node.id.ToString() + ": " + node.name);
                if (node.id == curNode.parent_id)
                {
                    opt_indx = n;
                }
                n++;
            }
        }
        popup_parent_dropdown.ClearOptions();
        popup_parent_dropdown.AddOptions(opts);
        //выбор в списке текущей выбранной категории
        popup_parent_dropdown.value = opt_indx;


        //поле: тип ноды (категория / элемент)
        Toggle [] popup_type_toggle = pnl_form.transform.Find("pnl_type").GetComponentsInChildren <Toggle>();
        //if (curNode.is_category == 1) {}
        popup_type_toggle[0].isOn         = true;
        popup_type_toggle[0].interactable = false;
        popup_type_toggle[1].isOn         = false;
        popup_type_toggle[1].interactable = false;

        //поле: сортировка
        TMP_InputField tmptxt = pnl_form.transform.Find("pnl_sort").GetComponentInChildren <TMP_InputField>();

        tmptxt.text = (is_new != 1) ? curNode.sort.ToString() : "10";

        //поле: название
        tmptxt      = pnl_form.transform.Find("pnl_name").GetComponentInChildren <TMP_InputField>();
        tmptxt.text = (is_new != 1) ? curNode.name : "";

        //поле: изображение
        tmptxt      = pnl_form.transform.Find("pnl_image").GetComponentInChildren <TMP_InputField>();
        tmptxt.text = (is_new != 1) ? curNode.image : "";

        //поле: короткое описание
        tmptxt      = pnl_form.transform.Find("pnl_small_desc").GetComponentInChildren <TMP_InputField>();
        tmptxt.text = (is_new != 1) ? curNode.short_desc : "";
        //поле: полное описание
        tmptxt      = pnl_form.transform.Find("pnl_full_desc").GetComponentInChildren <TMP_InputField>();
        tmptxt.text = (is_new != 1) ? curNode.full_desc : "";

        //save
        var btn = pnl_popup_btm.transform.Find("btn_save").GetComponent <Button>();

        btn.onClick.RemoveAllListeners();
        btn.onClick.AddListener(delegate { btn_Save_FormCategory(); });
    }
    //***********************************************************************
    //кнопка добавить/редактировать, is_new=1 если добавление, иначе редактирование текущей
    public void btn_AddEdit_Element(int is_new = 0)
    {
        //если попытка редактировать, а элемент не выбран
        if (is_new != 1 && curElmID <= 0)
        {
            //то добавление нового
            is_new = 1;
        }
        popup_is_new = is_new;

        //открытие попапа
        pnl_popups_backfon.SetActive(true);
        JsonSkillsTreeNode curNode = elmsCurCat.Find(x => x.id == curElmID);

        popup_caption.text = "Добавление нового элемента";
        if (is_new != 1)
        {
            popup_caption.text = "Редактирование элемента [" + curElmID + "]";
        }

        //поле: категория  элемента
        //заполнение дроп-списка в попапе всеми категориями
        List <JsonSkillsTreeNode> catList   = skillsCategories.getCatList();
        TMP_Dropdown  popup_parent_dropdown = pnl_form.transform.Find("pnl_parent").GetComponentInChildren <TMP_Dropdown>();
        List <string> opts = new List <string>();
        //opts.Add("0: корень"); нельзя прописать элемент к корню
        int opt_indx = 0, //для выбора опции в drop-списке
            n        = 0; //для исчисления родителей

        foreach (JsonSkillsTreeNode node in catList)
        {
            if (node.parent_id == 0)
            {
                //корневая категория
                opts.Add(node.id.ToString() + ": " + node.name);
            }
            else
            {
                //подкатегория
                opts.Add("    " + node.id.ToString() + ": " + node.name);
            }
            if (node.id == curCatID)
            {
                opt_indx = n;
            }
            n++;
        }
        popup_parent_dropdown.ClearOptions();
        popup_parent_dropdown.AddOptions(opts);
        //выбор в списке текущей выбранной категории
        popup_parent_dropdown.value = opt_indx;


        //поле: тип ноды (категория / элемент)
        Toggle[] popup_type_toggle = pnl_form.transform.Find("pnl_type").GetComponentsInChildren <Toggle>();
        popup_type_toggle[0].isOn         = false;
        popup_type_toggle[0].interactable = false;
        popup_type_toggle[1].isOn         = true;
        popup_type_toggle[1].interactable = false;

        //поле: сортировка
        TMP_InputField tmptxt = pnl_form.transform.Find("pnl_sort").GetComponentInChildren <TMP_InputField>();

        tmptxt.text = (is_new != 1) ? curNode.sort.ToString() : "10";

        //поле: название
        tmptxt      = pnl_form.transform.Find("pnl_name").GetComponentInChildren <TMP_InputField>();
        tmptxt.text = (is_new != 1) ? curNode.name : "";

        //поле: изображение
        tmptxt      = pnl_form.transform.Find("pnl_image").GetComponentInChildren <TMP_InputField>();
        tmptxt.text = (is_new != 1) ? curNode.image : "";

        //поле: короткое описание
        tmptxt      = pnl_form.transform.Find("pnl_small_desc").GetComponentInChildren <TMP_InputField>();
        tmptxt.text = (is_new != 1) ? curNode.short_desc : "";
        //поле: полное описание
        tmptxt      = pnl_form.transform.Find("pnl_full_desc").GetComponentInChildren <TMP_InputField>();
        tmptxt.text = (is_new != 1) ? curNode.full_desc : "";


        //save
        var btn = pnl_popup_btm.transform.Find("btn_save").GetComponent <Button>();

        btn.onClick.RemoveAllListeners();
        btn.onClick.AddListener(delegate { btn_Save_FormElement(); });
    }