private void lbSearchVerses_SelectedIndexChanged(object sender, EventArgs e) { if (lbSearchVerses.SelectedIndex == -1) { return; } BibleSearchResult si = (BibleSearchResult)lbSearchVerses.Items[lbSearchVerses.SelectedIndex]; // Map search version to primary version int chap = si.bibVerse.RefChapter; int verse = si.bibVerse.RefVerse; string primTrans = Program.ConfigHelper.BiblePrimaryTranslation; if (si.bibVerse.RefVersion != primTrans) { if (((si.bibVerse.RefVersion == "RST" || si.bibVerse.RefVersion == "UK") && primTrans == "KJV") || ((primTrans == "RST" || primTrans == "UK") && si.bibVerse.RefVersion == "KJV")) { chap = si.bibVerse.SecondaryChapter; verse = si.bibVerse.SecondaryVerse; } } // Select verse in the list SelectVerse(si.bibVerse.RefBook, chap, verse); UpdateStartButtons(); }
public static List <BibleSearchResult> Search(List <string> searchTerms) { if (searchTerms.Count < 1) { throw (new ApplicationException("No search terms")); } // Double check sql string p = ",./<>?[]\\{}|!@#$%^&*()-=_+:;'\""; foreach (string str in searchTerms) { if (str.IndexOfAny(p.ToCharArray()) != -1) { throw (new ApplicationException("Malformed sql passed to Search")); } } // Build the query string query = "SELECT \"VERSION\", \"REFBOOK\", \"REFCHAPTER\", \"REFVERSE\", \"DATA\", \"BOOK\", \"CHAPTER\", \"VERSE\" FROM \"BIBLEVERSES\" WHERE "; foreach (string s in searchTerms) { query += "(\"DATA\" LIKE '%" + s + "%') AND "; } query = query.Remove(query.Length - 4); // Query the database List <BibleSearchResult> lResults = new List <BibleSearchResult>(); using (FBirdTask t = new FBirdTask()) { t.CommandText = query; t.ExecuteReader(); int cutoff = 250; while (t.DR.Read() && cutoff > 0) { cutoff--; BibleSearchResult r = new BibleSearchResult(); BibleVerse bv = new BibleVerse(); bv.RefVersion = t.GetString(0); bv.RefBook = t.GetString(1); bv.RefChapter = t.GetInt32(2); bv.RefVerse = t.GetInt32(3); bv.Text = t.GetString(4); bv.SecondaryBook = t.GetString(5); bv.SecondaryChapter = t.GetInt32(6); bv.SecondaryVerse = t.GetInt32(7); r.bibVerse = bv; r.searchResult = bv.Text; lResults.Add(r); } } return(lResults); }
private void lbSearchVerses_MeasureItem(object sender, MeasureItemEventArgs e) { if (e.Index < 0) { return; } BibleSearchResult si = (BibleSearchResult)lbSearchVerses.Items[e.Index]; e.ItemHeight = (int)e.Graphics.MeasureString(si.ToString(), lbSearchVerses.Font, lbSearchVerses.Width - 15).Height + 6; }
public int Compare(BibleSearchResult x, BibleSearchResult y) { if (x.score == y.score) { return(new BibleVerseComparer().Compare(x, y)); } else { return(x.score.CompareTo(y.score)); } }
private void lbSearchVerses_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index < 0) { return; } // Init BibleSearchResult si = (BibleSearchResult)lbSearchVerses.Items[e.Index]; string txt = si.ToString(); SolidBrush brushNormal = new SolidBrush(Color.FromArgb(223, 223, 223)); SolidBrush brushSelected = new SolidBrush(Color.FromArgb(255, 204, 91)); StringFormat sf = new StringFormat(); sf.SetMeasurableCharacterRanges(SearchHelper.FindCharacterRanges(txt, searchTerms)); int h = (int)e.Graphics.MeasureString(txt, lbSearchVerses.Font, lbSearchVerses.Width - 15).Height; Rectangle r = new Rectangle(e.Bounds.X + 7, e.Bounds.Y + 3, lbSearchVerses.Width - 15, h); // Draw the background if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) { e.Graphics.FillRectangle(brushSelected, e.Bounds.X + 1, e.Bounds.Y + 1, e.Bounds.Width - 2, e.Bounds.Height - 2); } else { e.Graphics.FillRectangle(brushNormal, e.Bounds.X + 1, e.Bounds.Y + 1, e.Bounds.Width - 2, e.Bounds.Height - 2); } // Fill in the highlights foreach (Region rg in e.Graphics.MeasureCharacterRanges(txt, lbSearchVerses.Font, r, sf)) { e.Graphics.FillRegion(new SolidBrush(Color.FromArgb(100, Color.Yellow)), rg); } // Draw text if (si.score > 600) { e.Graphics.DrawString(txt, lbSearchVerses.Font, new SolidBrush(Color.FromArgb(80, 80, 80)), r, sf); } else { e.Graphics.DrawString(txt, lbSearchVerses.Font, Brushes.Black, r, sf); } }