public override void Display(IVwEnv vwenv, int hvo, int frag)
{
switch (frag)
{
case kfragPattern:
VwLength tableLen;
tableLen.nVal = 10000;
tableLen.unit = VwUnit.kunPercent100;
vwenv.OpenTable(1, tableLen, 0, VwAlignment.kvaCenter, VwFramePosition.kvfpVoid, VwRule.kvrlNone, 0, 0, false);
VwLength patternLen;
patternLen.nVal = 1;
patternLen.unit = VwUnit.kunRelative;
vwenv.MakeColumns(1, patternLen);
vwenv.OpenTableBody();
vwenv.OpenTableRow();
vwenv.set_IntProperty((int)FwTextPropType.ktptBorderBottom, (int)FwTextPropVar.ktpvMilliPoint, 1000);
vwenv.set_IntProperty((int)FwTextPropType.ktptBorderColor, (int)FwTextPropVar.ktpvDefault, (int)ColorUtil.ConvertColorToBGR(Color.Gray));
vwenv.set_IntProperty((int)FwTextPropType.ktptAlign, (int)FwTextPropVar.ktpvEnum, (int)FwTextAlign.ktalCenter);
vwenv.set_IntProperty((int)FwTextPropType.ktptPadBottom, (int)FwTextPropVar.ktpvMilliPoint, 2000);
vwenv.OpenTableCell(1, 1);
vwenv.OpenParagraph();
if (((ComplexConcPatternSda) vwenv.DataAccess).Root.IsLeaf)
{
OpenSingleLinePile(vwenv, GetMaxNumLines(vwenv), false);
vwenv.Props = m_bracketProps;
vwenv.AddProp(ComplexConcPatternSda.ktagChildren, this, kfragEmpty);
CloseSingleLinePile(vwenv, false);
}
else
{
vwenv.AddObjVecItems(ComplexConcPatternSda.ktagChildren, this, kfragNode);
}
vwenv.CloseParagraph();
vwenv.CloseTableCell();
vwenv.CloseTableRow();
vwenv.CloseTableBody();
vwenv.CloseTable();
break;
case kfragNode:
ComplexConcPatternNode node = ((ComplexConcPatternSda) vwenv.DataAccess).Nodes[hvo];
int maxNumLines = GetMaxNumLines(vwenv);
if (node is ComplexConcOrNode)
{
OpenSingleLinePile(vwenv, maxNumLines);
vwenv.AddProp(ktagInnerNonBoundary, this, kfragOR);
CloseSingleLinePile(vwenv, false);
}
else if (node is ComplexConcWordBdryNode)
{
OpenSingleLinePile(vwenv, maxNumLines);
vwenv.AddProp(ktagInnerNonBoundary, this, kfragHash);
CloseSingleLinePile(vwenv);
}
else if (node is ComplexConcGroupNode)
{
int numLines = GetNumLines(node);
bool hasMinMax = node.Maximum != 1 || node.Minimum != 1;
if (numLines == 1)
{
OpenSingleLinePile(vwenv, maxNumLines, false);
// use normal parentheses for a single line group
vwenv.AddProp(ktagLeftBoundary, this, kfragLeftParen);
vwenv.AddObjVecItems(ComplexConcPatternSda.ktagChildren, this, kfragNode);
vwenv.AddProp(hasMinMax ? ktagInnerNonBoundary : ktagRightBoundary, this, kfragRightParen);
if (hasMinMax)
DisplayMinMax(numLines, vwenv);
CloseSingleLinePile(vwenv, false);
}
else
{
vwenv.Props = m_bracketProps;
vwenv.set_IntProperty((int) FwTextPropType.ktptMarginLeading, (int) FwTextPropVar.ktpvMilliPoint, PileMargin);
vwenv.OpenInnerPile();
AddExtraLines(maxNumLines - numLines, ktagLeftNonBoundary, vwenv);
vwenv.AddProp(ktagLeftNonBoundary, this, kfragLeftParenUpHook);
for (int i = 1; i < numLines - 1; i++)
vwenv.AddProp(ktagLeftNonBoundary, this, kfragLeftParenExt);
vwenv.AddProp(ktagLeftBoundary, this, kfragLeftParenLowHook);
vwenv.CloseInnerPile();
vwenv.AddObjVecItems(ComplexConcPatternSda.ktagChildren, this, kfragNode);
vwenv.Props = m_bracketProps;
vwenv.set_IntProperty((int) FwTextPropType.ktptMarginTrailing, (int) FwTextPropVar.ktpvMilliPoint, PileMargin);
vwenv.OpenInnerPile();
AddExtraLines(maxNumLines - numLines, hasMinMax ? ktagInnerNonBoundary : ktagRightNonBoundary, vwenv);
vwenv.AddProp(hasMinMax ? ktagInnerNonBoundary : ktagRightNonBoundary, this, kfragRightParenUpHook);
for (int i = 1; i < numLines - 1; i++)
vwenv.AddProp(hasMinMax ? ktagInnerNonBoundary : ktagRightNonBoundary, this, kfragRightParenExt);
vwenv.AddProp(hasMinMax ? ktagInnerNonBoundary : ktagRightBoundary, this, kfragRightParenLowHook);
vwenv.CloseInnerPile();
if (hasMinMax)
DisplayMinMax(numLines, vwenv);
}
}
else
{
bool hasMinMax = node.Maximum != 1 || node.Minimum != 1;
int numLines = GetNumLines(node);
if (numLines == 1)
{
OpenSingleLinePile(vwenv, maxNumLines, false);
// use normal brackets for a single line constraint
vwenv.AddProp(ktagLeftBoundary, this, kfragLeftBracket);
DisplayFeatures(vwenv, node);
vwenv.AddProp(hasMinMax ? ktagInnerNonBoundary : ktagRightBoundary, this, kfragRightBracket);
if (hasMinMax)
DisplayMinMax(numLines, vwenv);
CloseSingleLinePile(vwenv, false);
}
else
{
// left bracket pile
vwenv.Props = m_bracketProps;
vwenv.set_IntProperty((int) FwTextPropType.ktptMarginLeading, (int) FwTextPropVar.ktpvMilliPoint, PileMargin);
vwenv.OpenInnerPile();
AddExtraLines(maxNumLines - numLines, ktagLeftNonBoundary, vwenv);
vwenv.AddProp(ktagLeftNonBoundary, this, kfragLeftBracketUpHook);
for (int i = 1; i < numLines - 1; i++)
vwenv.AddProp(ktagLeftNonBoundary, this, kfragLeftBracketExt);
vwenv.AddProp(ktagLeftBoundary, this, kfragLeftBracketLowHook);
vwenv.CloseInnerPile();
// feature pile
vwenv.set_IntProperty((int) FwTextPropType.ktptAlign, (int) FwTextPropVar.ktpvEnum, (int) FwTextAlign.ktalLeft);
vwenv.OpenInnerPile();
AddExtraLines(maxNumLines - numLines, ktagInnerNonBoundary, vwenv);
DisplayFeatures(vwenv, node);
vwenv.CloseInnerPile();
// right bracket pile
vwenv.Props = m_bracketProps;
vwenv.set_IntProperty((int) FwTextPropType.ktptMarginTrailing, (int) FwTextPropVar.ktpvMilliPoint, PileMargin);
vwenv.OpenInnerPile();
AddExtraLines(maxNumLines - numLines, hasMinMax ? ktagInnerNonBoundary : ktagRightNonBoundary, vwenv);
vwenv.AddProp(hasMinMax ? ktagInnerNonBoundary : ktagRightNonBoundary, this, kfragRightBracketUpHook);
for (int i = 1; i < numLines - 1; i++)
vwenv.AddProp(hasMinMax ? ktagInnerNonBoundary : ktagRightNonBoundary, this, kfragRightBracketExt);
vwenv.AddProp(hasMinMax ? ktagInnerNonBoundary : ktagRightBoundary, this, kfragRightBracketLowHook);
vwenv.CloseInnerPile();
if (hasMinMax)
DisplayMinMax(numLines, vwenv);
}
}
break;
}
}