Beispiel #1
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);
        }
Beispiel #2
0
        public void TestLoad_NoFilter()
        {
            CheckDisposed();

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

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

            // Now test the Load method
            handler.Load(m_annotationsGen.Hvo, -94, -1, (IVwCacheDa)m_mockedDataAccess.MockInstance);
            m_mockedDataAccess.Verify();
        }
Beispiel #3
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();
        }
        public void GetVirtualIndex()
        {
            FilteredSequenceHandler handler = new FilteredSequenceHandler(Cache,
                                                                          LangProject.kClassId, 1, new OddRowFilter(Cache,
                                                                                                                    (int)CmFilter.CmFilterTags.kflidRows), null,
                                                                          new SimpleFlidProvider((int)CmFilter.CmFilterTags.kflidRows));

            // setup
            // Added by setup:         0, virtual index 0
            AddRow(m_filter, new DummyRow());                   // 1, virtual index -1
            AddRow(m_filter, new DummyRow());                   // 2, virtual index 1
            AddRow(m_filter, new DummyRow());                   // 3, virtual index -1

            int hvoFilter = m_filter.Hvo;

            handler.Load(hvoFilter, handler.Tag, 0, Cache.VwCacheDaAccessor);

            // Test the GetVirtualIndex method
            Assert.AreEqual(0, handler.GetVirtualIndex(hvoFilter, 0));
            Assert.AreEqual(-1, handler.GetVirtualIndex(hvoFilter, 1));
            Assert.AreEqual(1, handler.GetVirtualIndex(hvoFilter, 2));
            Assert.AreEqual(-1, handler.GetVirtualIndex(hvoFilter, 3));
        }
Beispiel #5
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();
        }
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Constructs a TePrintLayoutConfig to configure the main print layout
        /// </summary>
        /// <param name="cache">The cache.</param>
        /// <param name="styleSheet">The style sheet.</param>
        /// <param name="publication">The publication.</param>
        /// <param name="viewType">Type of the view.</param>
        /// <param name="filterInstance">the book filter instance in effect</param>
        /// <param name="printDateTime">printing date and time</param>
        /// <param name="fIntroDivision">set to <c>true</c> for a division that displays book
        /// title and introduction material, <c>false</c> for a division that displays main
        /// scripture text.</param>
        /// <param name="hvoBook">The hvo of the book we're displaying.</param>
        /// <param name="sharedStream">A layout stream used for footnotes which is shared across
        /// multiple divisions</param>
        /// <param name="ws">The writing system to use for the view.</param>
        /// ------------------------------------------------------------------------------------
        public TePrintLayoutConfig(FdoCache cache, IVwStylesheet styleSheet,
                                   IPublication publication, TeViewType viewType, int filterInstance,
                                   DateTime printDateTime, bool fIntroDivision, int hvoBook, IVwLayoutStream sharedStream,
                                   int ws)
        {
            m_fdoCache           = cache;
            m_scr                = m_fdoCache.LangProject.TranslatedScriptureOA;
            m_styleSheet         = styleSheet;
            m_pub                = publication;
            m_viewType           = viewType;
            m_bookFilterInstance = filterInstance;
            m_printDateTime      = printDateTime;
            m_fIntroDivision     = fIntroDivision;
            m_hvoBook            = hvoBook;
            m_sharedStream       = sharedStream;
            m_ws = ws;

            m_sectionFilterInstance = g_nextSectionFilterInstance++;
            m_sectionFilter         = new FilteredSequenceHandler(cache, ScrBook.kClassId,
                                                                  m_sectionFilterInstance, this, this,
                                                                  new SimpleFlidProvider((int)ScrBook.ScrBookTags.kflidSections));

            m_paraCounter = ParagraphCounterManager.GetParaCounter(cache, (int)TeViewGroup.Scripture);
        }
Beispiel #7
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);
            }
        }
 /// --------------------------------------------------------------------------------
 /// <summary>
 /// Initializes a new instance of the <see cref="DummyChangeWatcher"/> class.
 /// </summary>
 /// <param name="handler">The filtered sequence handler.</param>
 /// --------------------------------------------------------------------------------
 public DummyChangeWatcher(FilteredSequenceHandler handler)
     : base(handler.Cache, handler.Tag)
 {
 }