/// ------------------------------------------------------------------------------------ /// <summary> /// Overridden to set the new values selected from the chooser dialog. /// </summary> /// <param name="chosenObjs">The chosen objs.</param> /// ------------------------------------------------------------------------------------ public override void SetItems(IEnumerable <ICmObject> chosenObjs) { CheckDisposed(); // null indicates that we cancelled out of the chooser dialog -- we shouldn't get // here with that value, but just in case... if (chosenObjs == null) { return; } int h1 = m_phoneEnvRefView.RootBox.Height; ICollection <IPhEnvironment> envs; if (m_flid == MoAffixAllomorphTags.kflidPosition) { envs = ((IMoAffixAllomorph)m_obj).PositionRS; } else { if (m_obj is IMoAffixAllomorph) { envs = ((IMoAffixAllomorph)m_obj).PhoneEnvRC; } else { envs = ((IMoStemAllomorph)m_obj).PhoneEnvRC; } } // First, we need a list of hvos added and a list of hvos deleted. HashSet <IPhEnvironment> newEnvs = new HashSet <IPhEnvironment>(chosenObjs.Cast <IPhEnvironment>()); HashSet <IPhEnvironment> delEnvs = new HashSet <IPhEnvironment>(); foreach (IPhEnvironment env in envs) { if (newEnvs.Contains(env)) { newEnvs.Remove(env); } else { delEnvs.Add(env); } } // Add all the new environments. UndoableUnitOfWorkHelper.Do(string.Format(DetailControlsStrings.ksUndoSet, m_fieldName), string.Format(DetailControlsStrings.ksRedoSet, m_fieldName), m_obj, () => { foreach (IPhEnvironment env in newEnvs) { m_phoneEnvRefView.AddNewItem(env); envs.Add(env); } foreach (IPhEnvironment env in delEnvs) { m_phoneEnvRefView.RemoveItem(env); envs.Remove(env); } }); int h2 = m_phoneEnvRefView.RootBox.Height; if (h1 != h2 && ViewSizeChanged != null) { ViewSizeChanged(this, new FwViewSizeEventArgs(h2, m_phoneEnvRefView.RootBox.Width)); } }
/// <summary> /// Overridden to set the new values selected from the chooser dialog. /// </summary> /// <param name="rghvosChosen"></param> public override void SetItems(List <int> rghvosChosen) { CheckDisposed(); m_phoneEnvRefView.Commit(); // null indicates that we cancelled out of the chooser dialog -- we shouldn't get // here with that value, but just in case... if (rghvosChosen == null) { return; } int h1 = m_phoneEnvRefView.RootBox.Height; // First, we need a list of hvos added and a list of hvos deleted. int citemsOld = m_cache.GetVectorSize(m_obj.Hvo, m_flid); List <int> rghvosNew = new List <int>(rghvosChosen); List <int> rghvosDel = new List <int>(citemsOld); if (citemsOld > 0) { int[] hvosOld = m_cache.GetVectorProperty(m_obj.Hvo, m_flid, false); Debug.Assert(citemsOld == hvosOld.Length); for (int i = 0; i < citemsOld; ++i) { if (rghvosNew.Contains(hvosOld[i])) { rghvosNew.Remove(hvosOld[i]); } else { rghvosDel.Add(hvosOld[i]); } } } // Add all the new environments. using (new UndoRedoTaskHelper(m_cache, String.Format(DetailControlsStrings.ksUndoSet, m_fieldName), String.Format(DetailControlsStrings.ksRedoSet, m_fieldName))) { for (int i = 0; i < rghvosNew.Count; ++i) { int hvo = (int)rghvosNew[i]; m_phoneEnvRefView.AddNewItem(hvo); if (m_flid == (int)MoAffixAllomorph.MoAffixAllomorphTags.kflidPosition) { ((MoAffixAllomorph)m_obj).PositionRS.Append(hvo); } else { if (m_obj is MoAffixAllomorph) { ((MoAffixAllomorph)m_obj).PhoneEnvRC.Add(hvo); } else { ((MoStemAllomorph)m_obj).PhoneEnvRC.Add(hvo); } } } for (int i = 0; i < rghvosDel.Count; ++i) { int hvo = (int)rghvosDel[i]; m_phoneEnvRefView.RemoveItem(hvo); if (m_flid == (int)MoAffixAllomorph.MoAffixAllomorphTags.kflidPosition) { ((MoAffixAllomorph)m_obj).PositionRS.Remove(hvo); } else { if (m_obj is MoAffixAllomorph) { ((MoAffixAllomorph)m_obj).PhoneEnvRC.Remove(hvo); } else { ((MoStemAllomorph)m_obj).PhoneEnvRC.Remove(hvo); } } } } int h2 = m_phoneEnvRefView.RootBox.Height; if (h1 != h2 && ViewSizeChanged != null) { ViewSizeChanged(this, new FwViewSizeEventArgs(h2, m_phoneEnvRefView.RootBox.Width)); } }