/// <summary> /// Handle the context menu for inserting an FsFeatDefn. /// </summary> /// <param name="mediator"></param> /// <param name="classId"></param> /// <param name="hvoOwner"></param> /// <param name="flid"></param> /// <param name="insertionPosition"></param> /// <returns></returns> public new static FsFeatDefnUi CreateNewUiObject(Mediator mediator, uint classId, int hvoOwner, int flid, int insertionPosition) { FsFeatDefnUi ffdUi = null; string className = "FsClosedFeature"; if (classId == FDO.Cellar.FsComplexFeature.kClassId) className = "FsComplexFeature"; using (MasterInflectionFeatureListDlg dlg = new MasterInflectionFeatureListDlg(className)) { FdoCache cache = (FdoCache)mediator.PropertyTable.GetValue("cache"); Debug.Assert(cache != null); dlg.SetDlginfo(cache.LangProject.MsFeatureSystemOA, mediator, true); switch (dlg.ShowDialog((Form)mediator.PropertyTable.GetValue("window"))) { case DialogResult.OK: // Fall through. case DialogResult.Yes: ffdUi = new FsFeatDefnUi(dlg.SelectedFeatDefn); mediator.SendMessage("JumpToRecord", dlg.SelectedFeatDefn.Hvo); break; } } return ffdUi; }
/// <summary> /// Handles the xWorks message to insert a new FsFeatDefn. /// Invoked by the RecordClerk via a main menu. /// </summary> /// <param name="argument">The xCore Command object.</param> /// <returns>true, if we handled the message, otherwise false, if there was an unsupported 'classname' parameter</returns> public override bool OnDialogInsertItemInVector(object argument) { CheckDisposed(); Debug.Assert(argument != null && argument is XCore.Command); string className = XmlUtils.GetOptionalAttributeValue( (argument as XCore.Command).Parameters[0], "className"); if (className == null || ((className != "FsClosedFeature") && (className != "FsComplexFeature"))) return false; if (className == "FsClosedFeature" && (argument as XCore.Command).Id != "CmdInsertClosedFeature") return false; using (MasterInflectionFeatureListDlg dlg = new MasterInflectionFeatureListDlg(className)) { FdoCache cache = (FdoCache)m_mediator.PropertyTable.GetValue("cache"); Debug.Assert(cache != null); dlg.SetDlginfo(cache.LangProject.MsFeatureSystemOA, m_mediator, true); switch (dlg.ShowDialog((Form)m_mediator.PropertyTable.GetValue("window"))) { case DialogResult.OK: // Fall through. case DialogResult.Yes: //m_mediator.SendMessage("JumpToRecord", dlg.SelectedFeatDefn.Hvo); // This is the equivalent functionality, but is deferred processing. // This is done so that the JumpToRecord can be processed last. m_mediator.BroadcastMessageUntilHandled("JumpToRecord", dlg.SelectedFeatDefn.Hvo); // LT-6412: this call will now cause the Mediator to be disposed while it is busy processing // this call, so there is code in the Mediator to handle in the middle of a msg the case // where the object is nolonger valid. This has happend before and was being handled, this // call "SendMessageToAllNow" has not had the code to handle the exception, so it was added. m_mediator.SendMessageToAllNow("MasterRefresh", cache.LangProject.MsFeatureSystemOA); break; } } return true; // We "handled" the message, regardless of what happened. }