//*********************************************************************** //чтение из произвольного файла public void btn_LoadFromOtherFile() { MessageBox.ShowMessage( () => { string file_path = EditorUtility.OpenFilePanel("Выберите файл древа(json)", "", "json"); //Debug.Log("file=" + file_path + ", ext="+ Path.GetExtension(file_path)); if (file_path.Length != 0) { if (Path.GetExtension(file_path) != ".json") { MessageBox.ShowMessage(() => {}, "Файл не json-формата."); } else { try { ReloadFromFile(file_path); JsonSkillsTreeNode[] new_nodes = SkillsTreeFile.ListsToArray(); MessageBox.ShowMessage(() => { }, "Файл загружен. Нодов: " + new_nodes.Length); } catch { MessageBox.ShowMessage(() => { }, "Ошибка при загрузки файла. Некорректный файл древа скилов."); } } } }, "Хотите загрузить данные из другого файла? Все изменения будут отменены", true ); }
//*********************************************************************** public void btn_RenumAllElements() { SkillsTreeFile.renumAllElements(curCatID); int elm_id = curElmID; refresh_all(); Set_Element_Active(elm_id); }
public void ReloadFromFile(string file = "") { //загрузка дерева из файла в статичный класс дерева (через него будет доступ к файлу) SkillsTreeFile.Load(file); //заполнение списков в классах-графах категорий и элементов scElements.reloadFromFile(); scCategories.reloadFromFile(); //обновление графа категорий + элементов текущей категории scCategories.RefreshGrap(); }
//*********************************************************************** //чтение из файла public void btn_LoadFromFile() { MessageBox.ShowMessage( () => { ReloadFromFile(); JsonSkillsTreeNode[] new_nodes = SkillsTreeFile.ListsToArray(); MessageBox.ShowMessage(() => {}, "Файл загружен. Нодов: " + new_nodes.Length); }, "Хотите загрузить данные из файла? Все изменения будут отменены", true ); }
//*********************************************************************** public void btn_Delete_Category() { MessageBox.ShowMessage( () => { int num = SkillsTreeFile.deleteCategoryAndSubnodes(curCatID); //обновление списка и графа refresh_all(); MessageBox.ShowMessage(() => {}, "Нодов удалено: " + num); }, "Действительно хотите удалить выбранную категорию? " + "В этом случае все ее ПОДКАТЕГОРИИ и их ЭЛЕМЕНТЫ будут удалены, " + "также будут удалены элементы текущей категории.", true ); }
//*********************************************************************** //запись в файл public void btn_SaveToFile() { MessageBox.ShowMessage( () => { int num = SkillsTreeFile.Save(); MessageBox.ShowMessage( () => { }, "Запись в файл произведена. Сохранено " + num + " нодов." ); }, "Хотите произвести запись всех изменений в файл?", true ); }
//*********************************************************************** // 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); }
//*********************************************************************** public void btn_Delete_Element() { if (elmsCurCat.Count > 0) { MessageBox.ShowMessage( () => { int elm_id = curElmID; SkillsTreeFile.deleteElement(curElmID); //обновление списка и графа refresh_all(); MessageBox.ShowMessage( () => { }, "Удален элемент #" + elm_id ); }, "Действительно хотите удалить выбранный элемент?", true ); } }
//*********************************************************************** //запись в файл как ... public void btn_SaveAs() { var path = EditorUtility.SaveFilePanel( "Сохранить древо в файл", "", "SkillsTree_new.json", "json"); if (path.Length != 0) { if (Path.GetExtension(path) != ".json") { MessageBox.ShowMessage(() => { }, "Файл должен быть json-формата."); } else { int num = SkillsTreeFile.Save(path); MessageBox.ShowMessage( () => {}, "Запись в файл (" + path + ") произведена. Сохранено " + num + " нодов." ); } } }
//*********************************************************************** //кнопка сохранить 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(); } }
//*********************************************************************** public void btn_RenumAllCats() { SkillsTreeFile.renumAllCats(); refresh_all(); }