public bool OnJumpToRecord(object argument)
{
CheckDisposed();
// Check if we're the right tool, and that we have a valid object id.
string toolName = m_mediator.PropertyTable.GetStringProperty("currentContentControl", null);
string areaName = m_mediator.PropertyTable.GetStringProperty("areaChoice", null);
string concordOn = m_mediator.PropertyTable.GetStringProperty("ConcordOn", null);
m_mediator.PropertyTable.RemoveProperty("ConcordOn");
Debug.Assert(!String.IsNullOrEmpty(toolName) && !String.IsNullOrEmpty(areaName));
if (areaName != "textsWords" || toolName != "concordance")
return false;
int hvoTarget = (int)argument;
if (!m_cache.ServiceLocator.IsValidObjectId(hvoTarget))
return false;
try
{
ICmObject target = m_cache.ServiceLocator.GetObject(hvoTarget);
int clid = target.ClassID;
int ws = 0;
ITsString tss;
switch (clid)
{
case WfiWordformTags.kClassId:
var wwf = (IWfiWordform)target;
if (wwf.Form != null && wwf.Form.TryWs(WritingSystemServices.kwsFirstVern, out ws, out tss))
InitializeConcordanceSearch(tss.Text, ws, ConcordanceLines.kWord);
break;
case LexEntryTags.kClassId:
case LexSenseTags.kClassId:
case WfiAnalysisTags.kClassId:
case PartOfSpeechTags.kClassId:
case WfiGlossTags.kClassId:
if (!String.IsNullOrEmpty(concordOn) && concordOn.Equals("WordPartOfSpeech"))
{
InitializeConcordanceSearchWordPOS(target);
}
else
{
InitializeConcordanceSearch(target);
}
break;
case MoStemMsaTags.kClassId:
case MoInflAffMsaTags.kClassId:
case MoDerivAffMsaTags.kClassId:
case MoUnclassifiedAffixMsaTags.kClassId:
if (!String.IsNullOrEmpty(concordOn) && concordOn.Equals("PartOfSpeechGramInfo"))
{
Debug.Assert(target is IMoMorphSynAnalysis);
var msa = target as IMoMorphSynAnalysis;
InitializeConcordanceSearch(target, msa.InterlinearNameTSS);
}
else
{
InitializeConcordanceSearch(target);
}
break;
default:
if (m_cache.ClassIsOrInheritsFrom(clid, MoFormTags.kClassId))
InitializeConcordanceSearch(target);
break;
}
}
finally
{
// indicate that OnJumpToRecord has been handled.
m_clerk.SuspendLoadingRecordUntilOnJumpToRecord = false;
}
return true;
}