Пример #1
0
        public void TestClearInfoAbout()
        {
            // Create two test objects and add them to the language project.
            // It doesn't really matter what type of object they are as long
            // as the object contains at least one guid property.
            CmFilter testObj1 = new CmFilter();
            CmFilter testObj2 = new CmFilter();

            m_fdoCache.LangProject.FiltersOC.Add(testObj1);
            m_fdoCache.LangProject.FiltersOC.Add(testObj2);

            // Set a guid property for the 2nd test object
            // that is equal to the first test object's guid.
            m_sda.SetGuid(testObj2.Hvo, (int)CmFilter.CmFilterTags.kflidApp, testObj1.Guid);

            // This should not delete the first test object's guid
            // from the cache's internal cache of object guids.
            ((IVwCacheDa)m_da).ClearInfoAbout(testObj2.Hvo,
                                              VwClearInfoAction.kciaRemoveObjectAndOwnedInfo);

            // This will make sure that get_ObjFromGuid()j doesn't defer to
            // the database when it cannot find the object in the cache.
            m_da.AutoloadPolicy = AutoloadPolicies.kalpNoAutoload;

            // Make sure we still can create the first test object from it's guid.
            Assert.AreEqual(testObj1.Hvo, m_sda.get_ObjFromGuid(testObj1.Guid));
        }
Пример #2
0
        public void TestLoad_ObjectSequenceFilterWithSubItems()
        {
            CheckDisposed();

            // Set up a filter
            CmFilter filter = new CmFilter();

            Cache.LangProject.FiltersOC.Add(filter);
            filter.ClassId = ScrScriptureNote.kClassId;
            // We will filter ScrScriptureNotes on the Categories field.
            filter.ColumnInfo = ScrScriptureNote.kclsidScrScriptureNoteString + "," +
                                ((int)ScrScriptureNote.ScrScriptureNoteTags.kflidCategories).ToString();
            filter.ShowPrompt = 1;
            CmRow row = new CmRow();

            filter.RowsOS.Append(row);
            CmCell cell = new CmCell();

            row.CellsOS.Append(cell);
            // Now specify the matching criteria for this filter cell
            ITsStrBldr bldr = TsStrBldrClass.Create();

            bldr.Replace(0, 0, "Matches  +subitems",
                         SIL.FieldWorks.Common.FwUtils.StyleUtils.CharStyleTextProps(null, Cache.DefaultUserWs));
            StringUtils.InsertOrcIntoPara(m_inMemoryCache.m_categoryDiscourse.Guid,
                                          FwObjDataTypes.kodtNameGuidHot, bldr, 8, 8, Cache.DefaultUserWs);
            cell.Contents.UnderlyingTsString = bldr.GetString();

            // Set up mocked ChooserDlg to expect to be called with the default category of Discourse (from
            // filter cell criteria defined above) but return Grammar category.
            m_mockedChooserDlg.ExpectAndReturn("GetPossibility", m_inMemoryCache.m_categoryGrammar.Hvo,
                                               new object[] { m_scr.NoteCategoriesOA, m_inMemoryCache.m_categoryDiscourse.Hvo });

            // Construct a handler to apply the above filter.
            filter.UserView            = m_userView;
            filter.PossibilitySupplier = (ICmPossibilitySupplier)m_mockedChooserDlg.MockInstance;
            FilteredSequenceHandler handler = new FilteredSequenceHandler(Cache,
                                                                          ScrBookAnnotations.kClassId, -42, filter, null, m_userView);

            // Now test the Load method
            // CacheVecProp() should be called with an array of HVOs representing all the Grammar notes,
            // including those that refer to sub-items of the main Grammar category.
            m_mockedDataAccess.Expect("CacheVecProp",
                                      new object[] { m_annotationsGen.Hvo, -94, new int[] { m_note2a.Hvo, m_note2b.Hvo, m_note3.Hvo }, 3 });
            handler.Load(m_annotationsGen.Hvo, -94, -1, (IVwCacheDa)m_mockedDataAccess.MockInstance);
            m_mockedDataAccess.Verify();
            m_mockedChooserDlg.Verify();

            // Make sure the newly-selected object (i.e., the Grammar category) has been stored as the
            // filter criteria (for next time).
            StringUtils.InsertOrcIntoPara(m_inMemoryCache.m_categoryGrammar.Guid,
                                          FwObjDataTypes.kodtNameGuidHot, bldr, 8, 9, Cache.DefaultUserWs);
            AssertEx.AreTsStringsEqual(bldr.GetString(), cell.Contents.UnderlyingTsString);
        }
Пример #3
0
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Implement CreateTestData, called by InMemoryFdoTestBase set up.
        /// </summary>
        /// ------------------------------------------------------------------------------------
        protected override void CreateTestData()
        {
            // Set up a filter, with a CmCell we can test on.
            m_inMemoryCache.InitializeAnnotationDefs();
            m_inMemoryCache.InitializeAnnotationCategories();

            CmFilter filter = new CmFilter();

            Cache.LangProject.FiltersOC.Add(filter);
            CmRow row = new CmRow();

            filter.RowsOS.Append(row);
            m_cell = new DummyCmCell();
            row.CellsOS.Append(m_cell);
        }
Пример #4
0
        public void TestLoad_AtomicObjectFilter()
        {
            CheckDisposed();

            // Set up a filter
            CmFilter filter = new CmFilter();

            Cache.LangProject.FiltersOC.Add(filter);
            filter.ClassId = ScrScriptureNote.kClassId;
            // We will filter ScrScriptureNotes on the AnnotationType field (which is actually a
            // field of the base class CmAnnotation).
            filter.ColumnInfo = ScrScriptureNote.kclsidScrScriptureNoteString + "," +
                                ((int)CmAnnotation.CmAnnotationTags.kflidAnnotationType).ToString();
            filter.ShowPrompt = 0;
            CmRow row = new CmRow();

            filter.RowsOS.Append(row);
            CmCell cell = new CmCell();

            row.CellsOS.Append(cell);
            // Now specify the matching criteria for this filter cell
            ITsStrBldr bldr = TsStrBldrClass.Create();

            bldr.Replace(0, 0, "Matches ",
                         SIL.FieldWorks.Common.FwUtils.StyleUtils.CharStyleTextProps(null, Cache.DefaultUserWs));
            StringUtils.InsertOrcIntoPara(m_inMemoryCache.m_translatorNoteDefn.Guid,
                                          FwObjDataTypes.kodtNameGuidHot, bldr, bldr.Length,
                                          bldr.Length, Cache.DefaultUserWs);
            cell.Contents.UnderlyingTsString = bldr.GetString();

            // Construct a handler to apply the above filter.
            filter.UserView = m_userView;
            FilteredSequenceHandler handler = new FilteredSequenceHandler(Cache,
                                                                          ScrBookAnnotations.kClassId, -42, filter, null, m_userView);

            // CacheVecProp() should be called with an array of HVOs representing only the translator notes.
            m_mockedDataAccess.Expect("CacheVecProp",
                                      new object[] { m_annotationsGen.Hvo, -94, new int[] { m_note2b.Hvo, m_note3.Hvo }, 2 });

            // Now test the Load method
            handler.Load(m_annotationsGen.Hvo, -94, -1, (IVwCacheDa)m_mockedDataAccess.MockInstance);
            m_mockedDataAccess.Verify();
        }
Пример #5
0
        public void TestUpdatePropIfCached()
        {
            // Create two test objects and add them to the language project.
            // It doesn't really matter what type of object they are as long
            // as the object contains at least one guid property.
            CmFilter testObj1 = new CmFilter();
            CmFilter testObj2 = new CmFilter();

            m_fdoCache.LangProject.FiltersOC.Add(testObj1);
            m_fdoCache.LangProject.FiltersOC.Add(testObj2);

            // Set a guid property for the 2nd test object
            // that is equal to the first test object's guid.
            m_sda.SetGuid(testObj2.Hvo, (int)CmFilter.CmFilterTags.kflidApp, testObj1.Guid);

            // This should not delete guid from the cache's internal object guid cache.
            m_da.UpdatePropIfCached(testObj2.Hvo, testObj2.FieldId,
                                    (int)CellarModuleDefns.kcptGuid, 0);

            // Make sure we still can create the first test object from it's guid.
            Assert.AreEqual(testObj1.Hvo, m_sda.get_ObjFromGuid(testObj1.Guid));
        }
Пример #6
0
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Determines if a dialog box asking for user settings is necessary and, if so,
        /// shows the dialog box.
        /// </summary>
        /// ------------------------------------------------------------------------------------
        private bool GetFilterValuesFromUser(CmFilter userFilter)
        {
            if (userFilter == null)
            {
                return(true);
            }

            // Don't try create an undo task for this. The user won't expect to undo/redo this
            // action. (TE-8575)
            using (new SuppressSubTasks(Cache))
            {
                Cache.SetIntProperty(userFilter.Hvo,
                                     (int)SIL.FieldWorks.FDO.Cellar.CmFilter.CmFilterTags.kflidShowPrompt, 0);

                if (userFilter.ShortName == "kstidNoteMultiFilter")
                {
                    using (MultipleFilterDlg dlg = new MultipleFilterDlg(Cache, userFilter))
                    {
                        if (dlg.ShowDialog() != DialogResult.OK)
                        {
                            return(false);
                        }
                    }
                }
                else if (userFilter.ShortName == "kstidCategoryNoteFilter")
                {
                    using (CategoryFilterDlg dlg = new CategoryFilterDlg(Cache, userFilter))
                    {
                        if (dlg.ShowDialog() != DialogResult.OK)
                        {
                            return(false);
                        }
                    }
                }
            }

            return(true);
        }
Пример #7
0
        public void TestLoad_IntFilter()
        {
            CheckDisposed();

            // Set up a filter
            CmFilter filter = new CmFilter();

            Cache.LangProject.FiltersOC.Add(filter);
            filter.ClassId = ScrScriptureNote.kClassId;
            // We will filter ScrScriptureNotes on the ResolutionStatus field.
            filter.ColumnInfo = ScrScriptureNote.kclsidScrScriptureNoteString + "," +
                                ((int)ScrScriptureNote.ScrScriptureNoteTags.kflidResolutionStatus).ToString();
            filter.ShowPrompt = 0;
            CmRow row = new CmRow();

            filter.RowsOS.Append(row);
            CmCell cell = new CmCell();

            row.CellsOS.Append(cell);
            // Now specify the matching criteria for this filter cell
            ITsStrFactory factory = TsStrFactoryClass.Create();

            cell.Contents.UnderlyingTsString = factory.MakeString("= 0", Cache.DefaultUserWs);

            // Construct a handler to apply the above filter.
            filter.UserView = m_userView;
            FilteredSequenceHandler handler = new FilteredSequenceHandler(Cache,
                                                                          ScrBookAnnotations.kClassId, -42, filter, null, m_userView);

            // CacheVecProp() should be called with an array of HVOs representing only the open notes.
            m_mockedDataAccess.Expect("CacheVecProp",
                                      new object[] { m_annotationsGen.Hvo, -94, new int[] { m_note1.Hvo, m_note2b.Hvo }, 2 });

            // Now test the Load method
            handler.Load(m_annotationsGen.Hvo, -94, -1, (IVwCacheDa)m_mockedDataAccess.MockInstance);
            m_mockedDataAccess.Verify();
        }
Пример #8
0
 /// ------------------------------------------------------------------------------------
 /// <summary>
 /// Initializes a new instance of the <see cref="NotesViewFilter"/> class.
 /// </summary>
 /// <param name="cache">The cache.</param>
 /// <param name="userFilter">The user filter.</param>
 /// ------------------------------------------------------------------------------------
 internal NotesViewFilter(FdoCache cache, CmFilter userFilter)
     : base(new ExcludeCheckingErrorsFilter(cache), userFilter)
 {
 }
Пример #9
0
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Apply the filter the user clicked in the side bar or in the menu.
        /// </summary>
        /// <param name="sender">The side-bar button the user clicked</param>
        /// ------------------------------------------------------------------------------------
        public virtual void OnChangeFilter(object sender)
        {
            CheckDisposed();

            CmFilter userFilter = null;

            if (sender is SBTabItemProperties)             // from sidebar
            {
                userFilter = (sender != null) ? (CmFilter)((SBTabItemProperties)sender).Tag : null;
            }
            else if (sender is TMItemProperties)             // from menu
            {
                userFilter = (sender != null) ? (CmFilter)((TMItemProperties)sender).Tag : null;
            }

            if (userFilter != null && !GetFilterValuesFromUser(userFilter))
            {
                return;
            }

            NotesViewFilter         annotationFilter = new NotesViewFilter(Cache, userFilter);
            FilteredSequenceHandler handler;

            try
            {
                handler = FilteredSequenceHandler.GetFilterInstance(m_fdoCache,
                                                                    ScrBookAnnotations.kClassId, annotationFilter, Handle.ToInt32());

                if (handler != null)
                {
                    handler.Reinitialize(false);
                }
                else
                {
                    if (userFilter != null)
                    {
                        userFilter.UserView = m_UserView;
                    }

                    handler = new FilteredSequenceHandler(m_fdoCache, ScrBookAnnotations.kClassId,
                                                          Handle.ToInt32(), annotationFilter, null, m_UserView);
                }
            }
            catch
            {
                // User must have cancelled the filter, or something horrible happened.
                // Just revert back to the previous state.
                NotesMainWnd notesMainWnd = TheMainWnd as NotesMainWnd;
                Debug.Assert(notesMainWnd != null);
                notesMainWnd.SelectFilterButton(m_vc.NotesSequenceHandler != null ?
                                                m_vc.NotesSequenceHandler.Filter as CmFilter: null);
                return;
            }

            Debug.Assert(handler != null);
            m_currentNotesTag = handler.Tag;

            // Set up the view constructor with the filtered sequence handler corresponding to the
            // notes filter chosen by the user.
            m_vc.NotesSequenceHandler = handler;
            RefreshDisplay();
            if (FilterChanged != null)
            {
                FilterChanged(this, userFilter);
            }
        }