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;
}