SIL.FieldWorks.IText.ComplexConcPatternVc.DisplayVariant C# (CSharp) Method

DisplayVariant() public method

public DisplayVariant ( IVwEnv vwenv, int tag, int frag ) : ITsString
vwenv IVwEnv
tag int
frag int
return ITsString
		public override ITsString DisplayVariant(IVwEnv vwenv, int tag, int frag)
		{
			// we use display variant to display literal strings that are editable
			ITsString tss = null;
			switch (frag)
			{
				case kfragFeatureLine:
					ComplexConcPatternNode node = ((ComplexConcPatternSda) vwenv.DataAccess).Nodes[vwenv.CurrentObject()];
					switch (tag)
					{
						case ktagType:
							string typeStr = null;
							if (node is ComplexConcMorphNode)
								typeStr = ITextStrings.ksComplexConcMorph;
							else if (node is ComplexConcWordNode)
								typeStr = ITextStrings.ksComplexConcWord;
							else if (node is ComplexConcTagNode)
								typeStr = ITextStrings.ksComplexConcTag;
							tss = CreateFeatureLine(ITextStrings.ksComplexConcType, typeStr, m_cache.DefaultUserWs);
							break;

						case ktagForm:
							ITsString form = null;
							var formMorphNode = node as ComplexConcMorphNode;
							if (formMorphNode != null)
							{
								form = formMorphNode.Form;
							}
							else
							{
								var formWordNode = node as ComplexConcWordNode;
								if (formWordNode != null)
									form = formWordNode.Form;
							}
							Debug.Assert(form != null);
							tss = CreateFeatureLine(ITextStrings.ksComplexConcForm, form, false);
							break;

						case ktagEntry:
							ITsString entry = null;
							var entryMorphNode = node as ComplexConcMorphNode;
							if (entryMorphNode != null)
								entry = entryMorphNode.Entry;
							Debug.Assert(entry != null);
							tss = CreateFeatureLine(ITextStrings.ksComplexConcEntry, entry, false);
							break;

						case ktagGloss:
							ITsString gloss = null;
							var glossMorphNode = node as ComplexConcMorphNode;
							if (glossMorphNode != null)
							{
								gloss = glossMorphNode.Gloss;
							}
							else
							{
								var glossWordNode = node as ComplexConcWordNode;
								if (glossWordNode != null)
									gloss = glossWordNode.Gloss;
							}
							Debug.Assert(gloss != null);
							tss = CreateFeatureLine(ITextStrings.ksComplexConcGloss, gloss, false);
							break;

						case ktagCategory:
							IPartOfSpeech category = null;
							bool catNegated = false;
							var catMorphNode = node as ComplexConcMorphNode;
							if (catMorphNode != null)
							{
								category = catMorphNode.Category;
								catNegated = catMorphNode.NegateCategory;
							}
							else
							{
								var catWordNode = node as ComplexConcWordNode;
								if (catWordNode != null)
								{
									category = catWordNode.Category;
									catNegated = catWordNode.NegateCategory;
								}
							}
							Debug.Assert(category != null);
							tss = CreateFeatureLine(ITextStrings.ksComplexConcCategory, category.Abbreviation.BestAnalysisAlternative, catNegated);
							break;

						case ktagTag:
							ICmPossibility tagPoss = null;
							var tagNode = node as ComplexConcTagNode;
							if (tagNode != null)
								tagPoss = tagNode.Tag;
							Debug.Assert(tagPoss != null);
							tss = CreateFeatureLine(ITextStrings.ksComplexConcTag, tagPoss.Abbreviation.BestAnalysisAlternative, false);
							break;

						case ktagInfl:
							tss = CreateFeatureLine(ITextStrings.ksComplexConcInflFeatures, null, false);
							break;

						default:
							IFsFeatDefn feature = m_curInflFeatures.Keys.Single(f => f.Hvo == tag);
							if (feature is IFsComplexFeature)
							{
								tss = CreateFeatureLine(feature.Abbreviation.BestAnalysisAlternative, null, false);
							}
							else if (feature is IFsClosedFeature)
							{
								var value = (ClosedFeatureValue) m_curInflFeatures[feature];
								tss = CreateFeatureLine(feature.Abbreviation.BestAnalysisAlternative, value.Symbol.Abbreviation.BestAnalysisAlternative, value.Negate);
							}
							break;
					}
					break;

				case kfragNodeMax:
					// if the max value is -1, it indicates that it is infinite
					ComplexConcPatternNode node1 = ((ComplexConcPatternSda) vwenv.DataAccess).Nodes[vwenv.CurrentObject()];
					tss = node1.Maximum == -1 ? m_infinity : m_cache.TsStrFactory.MakeString(node1.Maximum.ToString(CultureInfo.InvariantCulture), m_cache.DefaultUserWs);
					break;

				case kfragNodeMin:
					ComplexConcPatternNode node2 = ((ComplexConcPatternSda) vwenv.DataAccess).Nodes[vwenv.CurrentObject()];
					tss = m_cache.TsStrFactory.MakeString(node2.Minimum.ToString(CultureInfo.InvariantCulture), m_cache.DefaultUserWs);
					break;

				case kfragOR:
					tss = m_or;
					break;

				case kfragHash:
					tss = m_hash;
					break;

				default:
					tss = base.DisplayVariant(vwenv, tag, frag);
					break;
			}
			return tss;
		}