/// <summary> /// /// </summary> /// <param name="word"></param> void FillNode(Word word, TreeNode tnRootWord) { if (word.IsEmpty) { return; } tnRootWord.Tag = word; if (!word.IsEmpty) { #region noun verb advreb adjective if (word.Nouns.Count > 0) { RichTreeNode tn = new RichTreeNode("noun", m_FontForPartSpeech); tnRootWord.Nodes.Add(tn); foreach (Card card in word.Nouns) { AddCardToWordNode(tn, card, word.Nouns.IndexOf(card) + 1); } tn.Expand(); } if (word.Verbs.Count > 0) { RichTreeNode tn = new RichTreeNode("verb", m_FontForPartSpeech); tnRootWord.Nodes.Add(tn); foreach (Card card in word.Verbs) { AddCardToWordNode(tn, card, word.Verbs.IndexOf(card) + 1); } tn.Expand(); } if (word.Adverbs.Count > 0) { RichTreeNode tn = new RichTreeNode("advreb", m_FontForPartSpeech); tnRootWord.Nodes.Add(tn); foreach (Card card in word.Adverbs) { AddCardToWordNode(tn, card, word.Adverbs.IndexOf(card) + 1); } tn.Expand(); } if (word.Adjectives.Count > 0) { RichTreeNode tn = new RichTreeNode("adjective", m_FontForPartSpeech); tnRootWord.Nodes.Add(tn); foreach (Card card in word.Adjectives) { AddCardToWordNode(tn, card, word.Adjectives.IndexOf(card) + 1); } tn.Expand(); } #endregion TreeNode tnFindInExamples = tnRootWord.Nodes.Add(sFindInExamples); tnFindInExamples.Nodes.Add(sProcessingCaption); // обязательно надо ProcessingCaption, иначе незаполненный узел будет помечатся для тренажера tnFindInExamples = tnRootWord.Nodes.Add(sFindInWordsMore); tnFindInExamples.Nodes.Add(sProcessingCaption); tnRootWord.Expand(); } }
private void AddCardToWordNode(TreeNode tnRootWord, Card card, int partSpeechCounter) { string cardCaption; if (partSpeechCounter > 0) // значит это самые верхние узлы { String _partSpeechCounterString = GetFineLength((partSpeechCounter++).ToString() + ")", 5); if (card.CountOfUsage > 0) // && показывать кол-во употреблений { string usage = GetFineLength(card.CountOfUsage.ToString(), 4); // usage.Length == 6 cardCaption = string.Format("{0}-{2} {1}", _partSpeechCounterString, card.Synonyms, usage); } else { cardCaption = string.Format("{0} {2} {1}", _partSpeechCounterString, card.Synonyms, " "); // " ".length = 6 } } else // это вложенные узлы { cardCaption = string.Format("{0} {1} ", PartSpeechUtil.GetReadableName(card.PartSpeech), card.Synonyms); } RichTreeNode partSpeechNode = new RichTreeNode(cardCaption, this.tv1.Font); tnRootWord.Nodes.Add(partSpeechNode); partSpeechNode.ToolTipText = card.ToolTipText; partSpeechNode.ToolTipStore = card.ToolTipText; partSpeechNode.Tag = card; // Meanings foreach (string mean in card.Meanings) { partSpeechNode.Nodes.Add(mean); } // Examples if (card.Examples.Length > 0) { foreach (string ex in card.Examples) { partSpeechNode.Nodes.Add(new RichTreeNode(ex, m_FontForExample)); //if (card.Examples.Length == 1) //{ // partSpeechNode.Nodes.Add(new RichTreeNode("example: " + card.Examples[0])); // // partSpeechNode.Nodes.Add(new RichTreeNode(card.Examples[0])); //} //else //{ // TreeNode examples = partSpeechNode.Nodes.Add("examples:"); // examples.Nodes.Add(new RichTreeNode(ex)); // examples.ExpandAll(); //} } } // delayNodes - antonym, see also ..... Dictionary <string, RichTreeNode> delayNodes = new Dictionary <string, RichTreeNode> { }; foreach (Card delayCard in card.Childs.Keys) { string delayNodeName = card.Childs[delayCard]; RichTreeNode delayNode = null; delayNodes.TryGetValue(delayNodeName, out delayNode); if (delayNode == null) // если не нашли в коллекции то создадим { delayNode = new RichTreeNode(delayNodeName, m_FontForServiceNode); partSpeechNode.Nodes.Add(delayNode); delayNodes.Add(delayNodeName, delayNode); } delayNode.Tag = new List <Card> { }; ((List <Card>)delayNode.Tag).Add(delayCard); delayNode.Nodes.Add(this.sProcessingCaption); // обязательно надо ProcessingCaption, иначе незаполненный узел будет помечатся для тренажера } }