private bool CheckForAffixDataLoss(IMoAffixForm affix, List<IMoMorphSynAnalysis> rgmsaAffix)
{
bool fLoseInflCls = affix.InflectionClassesRC.Count > 0;
bool fLoseInfixLoc = false;
bool fLoseGramInfo = false;
bool fLoseRule = false;
switch (affix.ClassID)
{
case MoAffixProcessTags.kClassId:
fLoseRule = true;
break;
case MoAffixAllomorphTags.kClassId:
var allo = (IMoAffixAllomorph) affix;
fLoseInfixLoc = allo.PositionRS.Count > 0;
fLoseGramInfo = allo.MsEnvPartOfSpeechRA != null || allo.MsEnvFeaturesOA != null;
break;
}
for (int i = 0; !fLoseGramInfo && i < rgmsaAffix.Count; ++i)
{
var msaInfl = rgmsaAffix[i] as IMoInflAffMsa;
if (msaInfl != null)
{
if (msaInfl.AffixCategoryRA != null ||
msaInfl.FromProdRestrictRC.Count > 0 ||
msaInfl.SlotsRC.Count > 0 ||
msaInfl.InflFeatsOA != null)
{
fLoseGramInfo = true;
}
continue;
}
var msaDeriv = rgmsaAffix[i] as IMoDerivAffMsa;
if (msaDeriv != null)
{
if (msaDeriv.AffixCategoryRA != null ||
msaDeriv.FromInflectionClassRA != null ||
msaDeriv.FromPartOfSpeechRA != null ||
msaDeriv.FromProdRestrictRC.Count > 0 ||
msaDeriv.FromStemNameRA != null ||
msaDeriv.StratumRA != null ||
msaDeriv.ToInflectionClassRA != null ||
msaDeriv.ToProdRestrictRC.Count > 0 ||
msaDeriv.FromMsFeaturesOA != null ||
msaDeriv.ToMsFeaturesOA != null)
{
fLoseGramInfo = true;
}
continue;
}
var msaStep = rgmsaAffix[i] as IMoDerivStepMsa;
if (msaStep != null)
{
if (msaStep.InflectionClassRA != null ||
msaStep.ProdRestrictRC.Count > 0 ||
msaStep.InflFeatsOA != null ||
msaStep.MsFeaturesOA != null)
{
fLoseGramInfo = true;
}
}
}
if (fLoseInflCls || fLoseInfixLoc || fLoseGramInfo || fLoseRule)
{
string sMsg;
if (fLoseInflCls && fLoseInfixLoc && fLoseGramInfo)
sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInflClsInfixLocGramInfo", m_ksPath);
else if (fLoseRule && fLoseInflCls && fLoseGramInfo)
sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseRuleInflClsGramInfo", m_ksPath);
else if (fLoseInflCls && fLoseInfixLoc)
sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInflClsInfixLoc", m_ksPath);
else if (fLoseInflCls && fLoseGramInfo)
sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInflClsGramInfo", m_ksPath);
else if (fLoseInfixLoc && fLoseGramInfo)
sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInfixLocGramInfo", m_ksPath);
else if (fLoseRule && fLoseInflCls)
sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseRuleInflCls", m_ksPath);
else if (fLoseRule)
sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseRule", m_ksPath);
else if (fLoseInflCls)
sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInflCls", m_ksPath);
else if (fLoseInfixLoc)
sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInfixLoc", m_ksPath);
else
sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseGramInfo", m_ksPath);
string sCaption = m_mediator.StringTbl.GetStringWithXPath("ChangeLexemeMorphTypeCaption", m_ksPath);
DialogResult result = MessageBox.Show(sMsg, sCaption,
MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (result == DialogResult.No)
{
return true;
}
}
return false;
}