private void listView1_SelectedIndexChanged(object sender, EventArgs e) { if (!manual || MainForm.MustClose) { return; } MainForm.StillWorking(); this.makeSelectedCount(); if (listView1.SelectedItems.Count != 1) { return; } RabTreeData dt = Engine.db().rabbitGenTree((listView1.SelectedItems[0].Tag as AdultRabbit).ID); if (dt != null && dt.Name != null) { TreeNode tn = tvGens.InsertNode(dt, true); tn.ForeColor = Color.Blue; } else { MessageBox.Show(@"Не возможно найти информацию по данной записи. Возможно данного кролика списал другой сетевой пользователь программы. Во избежании проблем, придется обновить Лист поголовья", "Не могу найти запись"); _rsb.Run(); } }
public TreeNode InsertNode(RabTreeData data, bool append) { if (!append) { this.Nodes.Clear(); } else { //проверка на уже существование данной ветки for (int i = 0; i < this.Nodes.Count;) { if ((this.Nodes[i].Tag != null) && (this.Nodes[i].Tag as RabTreeData).ID == data.ID) { this.Nodes[i].Remove(); continue; } i++; } //удаляем последнюю если while (this.Nodes.Count >= _maxCnt) { this.Nodes.RemoveAt(this.Nodes.Count - 1); } } //TreeNode tn = this.Nodes.Insert(0, data.NameFormat(NameFormat)); TreeNode tn = insertNode(null, data); tn.ExpandAll(); tn.EnsureVisible(); return(tn); }
public GenomViewForm(int rFemaleId, int rMaleId) : this() { //RabNetEngRabbit rb1 = Engine.get().getRabbit(r1); //RabNetEngRabbit rb2 = Engine.get().getRabbit(r2); //MakeGenesis(rb1.Breed, rb2.Breed, rb1.Genom, rb2.Genom, rb1.FullName, rb2.FullName); RabTreeData femaleTree = Engine.db().rabbitGenTree(rFemaleId); TreeNode fTn = tvFemale.InsertNode(femaleTree); lbFemaleName.Text += femaleTree.Name; lbFemaleBreed.Text += _brds[femaleTree.BreedId]; RabTreeData maleTree = Engine.db().rabbitGenTree(rMaleId); TreeNode mTn = tvMale.InsertNode(maleTree); lbMaleName.Text += maleTree.Name; lbMaleBreed.Text += _brds[maleTree.BreedId]; checkRootInbreeding(fTn, mTn); string childName = getChildrenName(femaleTree.NameId, maleTree.NameId); lbChildName.Text += childName; TreeNode childNode = new TreeNode(childName); childNode.Nodes.Add(fTn.Clone() as TreeNode); childNode.Nodes.Add(mTn.Clone() as TreeNode); tvChildren.Nodes.Add(childNode); tvChildren.ExpandAll(); lbInbreeding.Text += _inbreeding ? "ДА" : "НЕТ"; }
private TreeNode insertNode(TreeNode parentNode, RabTreeData data) { TreeNode tn; if (parentNode == null) { tn = this.Nodes.Insert(0, data.NameFormat(NameFormat)); } else { tn = parentNode.Nodes.Add(data.NameFormat(NameFormat)); } if (_showStateColors) { if (data.State == RabAliveState.DEAD) { tn.ForeColor = DEAD; } else if (data.State == RabAliveState.IMPORTED_ASCENDANT) { tn.ForeColor = IA; } } if (data.Mother != null) { //TreeNode n = parentNode.Nodes.Add(data.Mother.NameFormat(NameFormat)); //insertNode(n, data.Mother); insertNode(tn, data.Mother); } if (data.Father != null) { //TreeNode n = parentNode.Nodes.Add(data.Father.NameFormat(NameFormat)); //insertNode(n, data.Father); insertNode(tn, data.Father); } tn.Tag = data; return(tn); }
private void listView1_SelectedIndexChanged(object sender, EventArgs e) { if (!manual || listView1.SelectedItems.Count == 0) { return; } setMenu(); makeSelectedCount(); if (listView1.SelectedItems.Count != 1) { return; } RabTreeData dt = Engine.db().rabbitGenTree((int)listView1.SelectedItems[0].Tag); if (dt != null) { TreeNode tn = tvGens.InsertNode(dt, true); tn.ForeColor = Color.Blue; } }
/// <summary> /// Получает родословную кролика с заданным rabId /// </summary> /// <param name="rabId">ID кролика</param> /// <param name="con"></param> /// <param name="lineage">Стэк родословной для предотвращения рекурсии</param> /// <returns></returns> private static RabTreeData getRabbitGenTree(MySqlConnection con, int rabId, int birthplace, int nameId, Stack <int> lineage)//, int level) { if (rabId == 0) { return(null); } //проверка на рекурсию, которая могла возникнуть после конвертации из старой mia-файла if (lineage.Count > 700) { //_logger.Warn("cnt:" + lineage.Count.ToString() + " we have suspect infinity inheritance loop: " + String.Join(",", Array.ConvertAll<int, string>(lineage.ToArray(), new Converter<int, string>(convIntToString)))); return(null); } lineage.Push(rabId); MySqlCommand cmd = new MySqlCommand("", con); MySqlDataReader rd = null; RabAliveState state = RabAliveState.ALIVE; bool inFarm = true; string query = @"SELECT r_id, {0:s} name, Coalesce(r_name,0) AS r_name, Coalesce(r_surname,0) AS r_surname, Coalesce(r_secname,0) AS r_secname, Coalesce(r_mother, 0) AS r_mother, Coalesce(r_father, 0) AS r_father, r_bon, r_born, r_breed, b_short_name, TO_DAYS(NOW())-TO_DAYS(r_born) age, Coalesce(r_birthplace,0) birthplace FROM {1:s} INNER JOIN breeds ON b_id = r_breed WHERE r_id={2:d} LIMIT 1;"; #if !DEMO if (birthplace != 0) //если ищем импортированного кролика { List <OneImport> lst = Import.Search(con, new Filters(Filters.RAB_ID, rabId.ToString())); inFarm = lst.Count > 0; ///если кролик не был импортирован в поголовье ///может возникнуть ситуация, что импортированный кролик имеет id родителя, который содержится и в import_ascendants и в imports if (inFarm && Import.AscendantExists(con, rabId, birthplace)) ///устранение неоднозначности { inFarm = RabbitGetter.GetRabbit(con, rabId).NameID == nameId; } } #endif if (inFarm) { cmd.CommandText = String.Format(query, "rabname(r_id,1)", "rabbits", rabId); rd = cmd.ExecuteReader(); if (!rd.HasRows) { rd.Close(); cmd.CommandText = String.Format(query, "deadname(r_id,1)", "dead", rabId); rd = cmd.ExecuteReader(); state = RabAliveState.DEAD; } } if (!inFarm) { cmd.CommandText = String.Format(query, String.Format("ascname(r_id,{0:d},1)", birthplace), "import_ascendants", rabId); rd = cmd.ExecuteReader(); state = RabAliveState.IMPORTED_ASCENDANT; } RabTreeData res = null; if (rd != null && rd.Read()) { res = new RabTreeData( rd.GetInt32("r_id"), rd.GetString("name"), rd.GetInt32("r_name"), rd.GetDateTime("r_born"), rd.GetInt32("r_breed") ); res.Bon = Rabbit.GetFBon(rd.GetString("r_bon"), true); res.BreedShortName = rd.GetString("b_short_name"); res.BirthPlace = rd.GetInt32("birthplace"); int mom = rd.GetInt32("r_mother"); int dad = rd.GetInt32("r_father"); int surname = rd.GetInt32("r_surname"); int secname = rd.GetInt32("r_secname"); rd.Close(); res.State = state; RabTreeData m = getRabbitGenTree(con, mom, birthplace, surname, lineage); RabTreeData d = getRabbitGenTree(con, dad, birthplace, secname, lineage); if (m != null) { res.Mother = m; } if (d != null) { res.Father = d; } } rd.Close(); return(res); }
public TreeNode InsertNode(RabTreeData data) { return(InsertNode(data, false)); }