Exemplo n.º 1
0
        /// ------------------------------------------------------------------------------------
        /// <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));
            }
        }