SIL.FieldWorks.Common.Framework.DetailControls.MorphTypeAtomicLauncher.CheckForAffixDataLoss C# (CSharp) Méthode

CheckForAffixDataLoss() private méthode

private CheckForAffixDataLoss ( IMoAffixForm affix, List rgmsaAffix ) : bool
affix IMoAffixForm
rgmsaAffix List
Résultat bool
		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;
		}