Ejemplo n.º 1
0
        /// <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();
            }
        }
Ejemplo n.º 2
0
        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, иначе незаполненный узел будет помечатся для тренажера
            }
        }