//-------------------------------------------------------------------------- // given a word and document(s), return the exact position of the word // in the document(s) public bool GetWordLocationDetails(Word word, List <Document> documents, GetWordLocationDetailsCallback callback) { return(_workerThread.PostTask(_ => { try { WordLocationDetails result = ContainsService.Instance.Query(documents, word); callback(result, true, null); } catch (Exception e) { callback(null, false, e.Message); } })); }
//-------------------------------------------------------------------------- private void FillLocationsListOnUIThread(WordLocationDetails locations, Word word, bool append = false) { // do we have a documents filter? _parentForm.Invoke((MethodInvoker) delegate { if (!append) { _parentForm.listViewLocations.Items.Clear(); } foreach (LocationDetail item in locations.LocationDetails) { ListViewItem listViewItem = new ListViewItem(); listViewItem.Text = item.Document.GutenbergId; listViewItem.SubItems.Add(item.Document.Title); listViewItem.SubItems.Add(word.Value); listViewItem.SubItems.Add((item.Location.Line + 1).ToString( "N0", CultureInfo.InvariantCulture)); listViewItem.SubItems.Add((item.Location.Page + 1).ToString( "N0", CultureInfo.InvariantCulture)); listViewItem.SubItems.Add((item.Location.Sentence + 1).ToString( "N0", CultureInfo.InvariantCulture)); listViewItem.SubItems.Add((item.Location.Paragraph + 1).ToString( "N0", CultureInfo.InvariantCulture)); listViewItem.Tag = item; _parentForm.listViewLocations.Items.Add(listViewItem); } UpdateLocationsCount(); // update the title of the form to reflect that currently selected word _parentForm.Text = String.Format( "Book Concordance - {0} Inspector", _showGroups ? "Groups" : "Words"); }); }
//------------------------------------------------------------------------- public WordLocationDetails Query(List <Document> documents, Word word) { // query the DB List <Contains> contains = ContainsDao.Query(documents, word); WordLocationDetails locationDetails = new WordLocationDetails(); locationDetails.Word = word; locationDetails.LocationDetails = new List <LocationDetail>(); foreach (Contains item in contains) { locationDetails.LocationDetails.Add(new LocationDetail() { Document = DocumentsService.Instance.GetById(item.DocumentId), Location = item }); } return(locationDetails); }