Exemple #1
0
		public void Setup()
		{
			string sBackupFile = UnzipBackup();
			RestoreDbBackup(sBackupFile, "FlexChorusTest");
			// now, create the data cache for the test project.
			Dictionary<string, string> cacheOptions = new Dictionary<string, string>();
			cacheOptions.Add("c", MiscUtils.LocalServerName);
			cacheOptions.Add("db", "FlexChorusTest");
			m_cache = FdoCache.Create(cacheOptions);
			Debug.Assert(m_cache != null);
			m_cache.EnableBulkLoadingIfPossible(true);
			InstallVirtuals(@"Language Explorer\Configuration\Main.xml",
				new string[] { "SIL.FieldWorks.FDO.", "SIL.FieldWorks.IText." });
		}
		/// <summary>
		/// Load sections into the books of a scripture tree view optionally including the
		/// heading as well as the content of each section.
		/// </summary>
		/// <param name="cache"></param>
		/// <param name="fIncludeHeadings"></param>
		public void LoadSections(FdoCache cache, bool fIncludeHeadings)
		{
			try
			{
				cache.EnableBulkLoadingIfPossible(true);
				// first load the book ids.
				this.Nodes.Clear();
				this.LoadBooks(cache);

				TreeNode bibleNode;
				if (this.Nodes.Count == 1)
				{
					bibleNode = this.Nodes[0];
				}
				else if (this.Nodes.Count > 0)
				{
					throw new ArgumentException("We should only have 1 Bible node, not " + this.Nodes.Count);
				}
				else
					return;
				if (cache.LangProject.TranslatedScriptureOA == null)
					return;

				Scripture scripture = cache.LangProject.TranslatedScriptureOA as Scripture;
				foreach (TreeNode testament in bibleNode.Nodes)
				{
					foreach (TreeNode bookNode in testament.Nodes)
					{
						IScrBook book = ScrBook.CreateFromDBObject(cache, (int)bookNode.Tag) as IScrBook;
						// Add Title node.
						if (book.TitleOAHvo != 0)
						{
							TreeNode titleNode =
								new TreeNode(ResourceHelper.GetResourceString("kstidScriptureTitle"));
							titleNode.Name = book.TitleOAHvo.ToString();
							titleNode.Tag = book.TitleOAHvo;
							bookNode.Nodes.Add(titleNode);
						}

						// Add Sections.
						foreach (IScrSection section in book.SectionsOS)
						{
							string chapterVerseBridge = scripture.ChapterVerseBridgeAsString(section);
							if (fIncludeHeadings && section.HeadingOAHvo != 0)
							{
								// Include the heading text if it's not empty.  See LT-8764.
								int cTotal = 0;
								foreach (IStTxtPara para in section.HeadingOA.ParagraphsOS)
									cTotal += para.Contents.Length;
								if (cTotal > 0)
								{
									string sFmt = ResourceHelper.GetResourceString("kstidSectionHeading");
									TreeNode node = new TreeNode(String.Format(sFmt, chapterVerseBridge));
									node.Name = String.Format(sFmt, section.Hvo.ToString());
									node.Tag = section.HeadingOAHvo;	// expect an StText
									bookNode.Nodes.Add(node);
								}
							}
							TreeNode sectionNode =
								new TreeNode(chapterVerseBridge);
							sectionNode.Name = section.Hvo.ToString();
							sectionNode.Tag = section.ContentOAHvo;	// expect an StText
							bookNode.Nodes.Add(sectionNode);
						}

						// Add Footnotes in reverse order, so we can insert them in the proper order.
						List<IStFootnote> footnotes = new List<IStFootnote>(book.FootnotesOS);
						footnotes.Reverse();
						foreach (IStFootnote footnote in footnotes)
						{
							ScrFootnote scrFootnote = footnote as ScrFootnote;
							if (scrFootnote == null)
								scrFootnote = new ScrFootnote(cache, footnote.Hvo);
							//  insert under the relevant section, if any (LTB-408)
							int hvoContainingObj;
							if (scrFootnote.TryGetContainingSectionHvo(out hvoContainingObj) ||
								scrFootnote.TryGetContainingTitle(out hvoContainingObj))
							{
								string nodeName = scripture.ContainingRefAsString(scrFootnote);
								TreeNode footnoteNode = new TreeNode(nodeName);
								footnoteNode.Tag = footnote.Hvo;
								footnoteNode.Name = "Footnote";

								// see if we can lookup the node of this section.
								int nodeIndex = bookNode.Nodes.IndexOfKey(hvoContainingObj.ToString());
								//TreeNode[] sectionNodes = bookNode.Nodes.Find(hvoSection.ToString(), false);
								//if (sectionNodes != null && sectionNodes.Length > 0)
								if (nodeIndex >= 0)
									bookNode.Nodes.Insert(nodeIndex + 1, footnoteNode);
								else
									bookNode.Nodes.Add(footnoteNode);	// insert at end.
							}
						}
					}
				}
			}
			finally
			{
				cache.EnableBulkLoadingIfPossible(false);
			}
		}
		/// <summary>
		/// Load ScrBooks into the scripture tree view.
		/// </summary>
		/// <param name="cache"></param>
		public void LoadBooks(FdoCache cache)
		{
			if (cache.LangProject.TranslatedScriptureOA == null)
				return;
			try
			{
				cache.EnableBulkLoadingIfPossible(true);
				List<TreeNode> otBooks = new List<TreeNode>();
				List<TreeNode> ntBooks = new List<TreeNode>();
				foreach (IScrBook book in cache.LangProject.TranslatedScriptureOA.ScriptureBooksOS)
				{
					TreeNode node = new TreeNode((book.BookIdRA as ScrBookRef).UIBookName);
					node.Tag = book.Hvo;
					node.Name = "Book";	// help us query for books.
					if (book.CanonicalNum < Scripture.kiNtMin)
						otBooks.Add(node);
					else
						ntBooks.Add(node);
				}

				TreeNode bibleNode = new TreeNode(ScrControls.kstidBibleNode);
				if (otBooks.Count > 0)
				{
					TreeNode testamentNode = new TreeNode(ScrControls.kstidOtNode,
						otBooks.ToArray());
					testamentNode.Name = "Testament"; // help us query for Testaments
					bibleNode.Nodes.Add(testamentNode);
				}

				if (ntBooks.Count > 0)
				{
					TreeNode testamentNode = new TreeNode(ScrControls.kstidNtNode,
						ntBooks.ToArray());
					testamentNode.Name = "Testament"; // help us query for Testaments
					bibleNode.Nodes.Add(testamentNode);
				}

				this.Nodes.Add(bibleNode);
			}
			finally
			{
				cache.EnableBulkLoadingIfPossible(false);
			}
		}