private void OnListViewOfWordsMatchingCurrentItem_Click(object sender, EventArgs e) { if (_listViewOfWordsMatchingCurrentItem.SelectedItem != null) { int selectedListIndex = _listViewOfWordsMatchingCurrentItem.SelectedIndex; string word = _listViewOfWordsMatchingCurrentItem.SelectedItem.ToString(); RecordToken <LexEntry> recordToken = ((RecordTokenToStringAdapter <LexEntry>)(_listViewOfWordsMatchingCurrentItem.SelectedItem)).AdaptedRecordToken; Point start = _listViewOfWordsMatchingCurrentItem.GetItemRectangle(selectedListIndex). Location; start.Offset(_listViewOfWordsMatchingCurrentItem.Location); Point destination = _vernacularBox.Location; destination.Offset(_vernacularBox.TextBoxes[0].Location); // NB: don't do this before storing what they clicked on. AddCurrentWord(); //don't throw away what they were typing _task.TryToRemoveAssociationWithListWordFromEntry(recordToken); // _movingLabel.Go(word,_listViewOfWordsMatchingCurrentItem.GetItemRect(selectedListIndex).Location, _vernacularBox.Location) UpdateStuff(); // _vernacularBox.TextBoxes[0].Text = word; _animationIsMovingFromList = true; _flyingLabel.Go(word, start, destination); } }
private void MoveRecordToAppropriateListBox(RecordToken <LexEntry> record) { if (_isNotComplete(record.RealObject)) { if (_completedRecords.Contains(record)) { _completedRecords.Remove(record); } if (!_todoRecords.Contains(record)) { _todoRecords.Add(record); } } else { if (_todoRecords.Contains(record)) { _todoRecords.Remove(record); } if (!_completedRecords.Contains(record)) { _completedRecords.Add(record); } } _todoRecordsListBox.DataSource = _todoRecords; _completedRecordsListBox.DataSource = _completedRecords; _todoRecordsListBox.VirtualListSize = _todoRecords.Count; _completedRecordsListBox.VirtualListSize = _completedRecords.Count; }
public string GetToolTip(object item) { RecordToken <LexEntry> recordToken = (RecordToken <LexEntry>)item; LexEntry entry = recordToken.RealObject; return(entry.GetToolTipText()); }
private void OnRetrieveVirtualItemEvent(object sender, RetrieveVirtualItemEventArgs e) { RecordToken <LexEntry> recordToken = _records[e.ItemIndex]; var displayString = (string)recordToken["Form"]; e.Item = new ListViewItem(displayString); if ((string)recordToken["WritingSystem"] != _listWritingSystem.Id) { displayString = (string)recordToken["Form"]; e.Item.Font = new Font(e.Item.Font, FontStyle.Italic); //!!! TODO: Get the correct font from the respective writingsystem and maybe put the writingsystem id behind the form!! --TA 8.9.08 } if (string.IsNullOrEmpty(displayString)) { displayString = "("; if (IsWritingSystemUsedInLexicalForm(_listWritingSystem.Id)) { displayString += StringCatalog.Get("~Empty", "This is what shows for a word in a list when the user hasn't yet typed anything in for the word. Like if you click the 'New Word' button repeatedly."); } else { displayString += StringCatalog.Get("~No Gloss", "This is what shows if the user is listing words by the glossing language, but the word doesn't have a gloss."); } displayString += ")"; } e.Item.Text = displayString; }
public void Setup() { dataMapper = new MemoryDataMapper <PalasoTestItem>(); Dictionary <string, object> results = new Dictionary <string, object>(); results["string"] = "result"; results["int"] = 12; Token = new RecordToken <PalasoTestItem>(dataMapper, results, new TestRepositoryId(8)); }
private void UpdatePreviousAndNextRecords() { int currentIndex = RecordListCurrentIndex; _previousRecord = (currentIndex > 0) ? _todoRecords[currentIndex - 1] : null; _nextRecord = (currentIndex < _todoRecords.Count - 1) ? _todoRecords[currentIndex + 1] : null; }
public void RemovingGlossFromEmptyEntry_RemovesEntry() { RecordToken <LexEntry> token = PrepareEntryWithOneMeaning(); //now simulate removing it, as when the user wants to correct spelling Task.TryToRemoveAssociationWithListWordFromEntry(token); Assert.AreEqual(0, _lexEntryRepository.GetEntriesWithMatchingLexicalForm("uno", VernWs). Count); Task.Deactivate(); }
public void AddWordASecondTime_DoesNothing() { RecordToken <LexEntry> token = PrepareEntryWithOneMeaning(); RecordToken <LexEntry> token2 = PrepareEntryWithOneMeaning(); LexEntry entry = token.RealObject; LexEntry entry2 = token2.RealObject; Assert.AreSame(entry, entry2); Assert.AreEqual(1, entry.Senses.Count); Assert.AreEqual(1, _lexEntryRepository.CountAllItems()); }
public void Compare_KhmerWordsUsingDefaultCollation_ComparesNotEqual() { using (var e = new TestEnvironment()) { var ws = new WritingSystemDefinition("en") {DefaultCollation = new IcuRulesCollationDefinition("standard")}; var sd1 = new SortDefinition("Form", ws.DefaultCollation.Collator); var results1 = new Dictionary<string, object> {{"Form", "សង្ឃនៃអំបូរអឺរ៉ុន"}}; var results2 = new Dictionary<string, object> {{"Form", "បូជាចារ្យនៃអំបូរអឺរ៉ុន"}}; var rt1 = new RecordToken<PalasoTestItem>(e.DataMapper, results1, new TestRepositoryId(8)); var rt2 = new RecordToken<PalasoTestItem>(e.DataMapper, results2, new TestRepositoryId(8)); var rtc = new RecordTokenComparer<PalasoTestItem>(new[] { sd1 }); int order = rtc.Compare(rt1, rt2); Assert.That(order, Is.Not.EqualTo(0)); } }
public void Compare_EnglishWordsUsingInvariantCulture_ComparesNotEqual() { using (var e = new TestEnvironment()) { var sd1 = new SortDefinition("Form", StringComparer.InvariantCulture); var results1 = new Dictionary <string, object>(); results1.Add("Form", "form1"); var results2 = new Dictionary <string, object>(); results2.Add("Form", "form2"); var rt1 = new RecordToken <PalasoTestItem>(e.DataMapper, results1, new TestRepositoryId(8)); var rt2 = new RecordToken <PalasoTestItem>(e.DataMapper, results2, new TestRepositoryId(8)); var rtc = new RecordTokenComparer <PalasoTestItem>(new[] { sd1 }); int order = rtc.Compare(rt1, rt2); Assert.That(order, Is.Not.EqualTo(0)); } }
public void Compare_KhmerWordsUsingOrdinal_ComparesNotEqual() { using (var e = new TestEnvironment()) { var sd1 = new SortDefinition("Form", StringComparer.Ordinal); var results1 = new Dictionary<string, object>(); results1.Add("Form", "សង្ឃនៃអំបូរអឺរ៉ុន"); var results2 = new Dictionary<string, object>(); results2.Add("Form", "បូជាចារ្យនៃអំបូរអឺរ៉ុន"); var rt1 = new RecordToken<PalasoTestItem>(e.DataMapper, results1, new TestRepositoryId(8)); var rt2 = new RecordToken<PalasoTestItem>(e.DataMapper, results2, new TestRepositoryId(8)); var rtc = new RecordTokenComparer<PalasoTestItem>(new[] { sd1 }); int order = rtc.Compare(rt1, rt2); Assert.That(order, Is.Not.EqualTo(0)); } }
public void Compare_EnglishWordsUsingInvariantCulture_ComparesNotEqual() { using (var e = new TestEnvironment()) { var sd1 = new SortDefinition("Form", StringComparer.InvariantCulture); var results1 = new Dictionary<string, object>(); results1.Add("Form", "form1"); var results2 = new Dictionary<string, object>(); results2.Add("Form", "form2"); var rt1 = new RecordToken<PalasoTestItem>(e.DataMapper, results1, new TestRepositoryId(8)); var rt2 = new RecordToken<PalasoTestItem>(e.DataMapper, results2, new TestRepositoryId(8)); var rtc = new RecordTokenComparer<PalasoTestItem>(new[] {sd1}); int order = rtc.Compare(rt1, rt2); Assert.That(order, Is.Not.EqualTo(0)); } }
public void Compare_KhmerWordsUsingOrdinal_ComparesNotEqual() { using (var e = new TestEnvironment()) { var sd1 = new SortDefinition("Form", StringComparer.Ordinal); var results1 = new Dictionary <string, object>(); results1.Add("Form", "សង្ឃនៃអំបូរអឺរ៉ុន"); var results2 = new Dictionary <string, object>(); results2.Add("Form", "បូជាចារ្យនៃអំបូរអឺរ៉ុន"); var rt1 = new RecordToken <PalasoTestItem>(e.DataMapper, results1, new TestRepositoryId(8)); var rt2 = new RecordToken <PalasoTestItem>(e.DataMapper, results2, new TestRepositoryId(8)); var rtc = new RecordTokenComparer <PalasoTestItem>(new[] { sd1 }); int order = rtc.Compare(rt1, rt2); Assert.That(order, Is.Not.EqualTo(0)); } }
public void RemovingAssociationWith_OnlyRemovesGloss() { RecordToken <LexEntry> token = PrepareEntryWithOneMeaning(); //now tweak the entry LexEntry entry = token.RealObject; LexSense leaveAloneSense = new LexSense(); entry.Senses.Add(leaveAloneSense); leaveAloneSense.Definition.SetAlternative(_glossingLanguageWSId, "single"); Assert.AreEqual(2, entry.Senses.Count); //now simulate removing it, as when the user wants to correct spelling Task.TryToRemoveAssociationWithListWordFromEntry(token); Assert.AreEqual(1, _lexEntryRepository.GetEntriesWithMatchingLexicalForm("uno", VernWs). Count); Assert.AreEqual(1, entry.Senses.Count); Task.Deactivate(); }
public void RecordTokensAddedToSortedDictionary_RecordTokensDifferOnlyInForm_DoesNotThrow() { var results1 = new Dictionary <string, object>(); results1.Add("Form", "សង្ឃនៃអំបូរអឺរ៉ុន"); //results1.Add("Form", "form1"); results1.Add("Sense", 0); var results2 = new Dictionary <string, object>(); results2.Add("Form", "បូជាចារ្យនៃអំបូរអឺរ៉ុន"); //results2.Add("Form", "form2"); results2.Add("Sense", 0); var rt1 = new RecordToken <PalasoTestItem>(dataMapper, results1, new TestRepositoryId(8)); var rt2 = new RecordToken <PalasoTestItem>(dataMapper, results2, new TestRepositoryId(8)); var sortedDictionary = new SortedDictionary <RecordToken <PalasoTestItem>, object>(); sortedDictionary.Add(rt1, null); sortedDictionary.Add(rt2, null); Console.WriteLine(""); }
public void Compare_KhmerWordsUsingWritingSystemSameAsOtherLanguage_ComparesNotEqual() { using (var e = new TestEnvironment()) { var ws = new WritingSystemDefinition("en"); ws.SortUsing = WritingSystemDefinition.SortRulesType.OtherLanguage; ws.SortRules = "km-KH"; var sd1 = new SortDefinition("Form", ws.Collator); var results1 = new Dictionary<string, object>(); results1.Add("Form", "សង្ឃនៃអំបូរអឺរ៉ុន"); var results2 = new Dictionary<string, object>(); results2.Add("Form", "បូជាចារ្យនៃអំបូរអឺរ៉ុន"); var rt1 = new RecordToken<PalasoTestItem>(e.DataMapper, results1, new TestRepositoryId(8)); var rt2 = new RecordToken<PalasoTestItem>(e.DataMapper, results2, new TestRepositoryId(8)); var rtc = new RecordTokenComparer<PalasoTestItem>(new[] { sd1 }); int order = rtc.Compare(rt1, rt2); Assert.That(order, Is.Not.EqualTo(0)); } }
public void SetCurrentRecordToPrevious_ChangedSoNoLongerMeetsFilter_RemovedFromTodoAndAddedToCompleteList() { using ( var missingInfoControl = new MissingInfoControl(_missingTranslationRecordList, _viewTemplate, IsMissingTranslation, _lexEntryRepository, new TaskMemory())) { missingInfoControl.SetCurrentRecordToNext(); RecordToken <LexEntry> recordToMove = missingInfoControl.CurrentRecord; AddTranslationToEntry(missingInfoControl.CurrentEntry, "a bogus translation of example"); missingInfoControl.SetCurrentRecordToPrevious(); Assert.IsFalse(missingInfoControl._todoRecordsListBox.DataSource.Contains(recordToMove)); Assert.IsTrue(missingInfoControl._completedRecordsListBox.DataSource.Contains(recordToMove)); #if Visual DebugShowState(missingInfoControl, currentRecord); #endif } }
public void Compare_KhmerWordsUsingWritingSystemSameAsOtherLanguage_ComparesNotEqual() { using (var e = new TestEnvironment()) { var ws = new WritingSystemDefinition("en"); ws.SortUsing = WritingSystemDefinition.SortRulesType.OtherLanguage; ws.SortRules = "km-KH"; var sd1 = new SortDefinition("Form", ws.Collator); var results1 = new Dictionary <string, object>(); results1.Add("Form", "សង្ឃនៃអំបូរអឺរ៉ុន"); var results2 = new Dictionary <string, object>(); results2.Add("Form", "បូជាចារ្យនៃអំបូរអឺរ៉ុន"); var rt1 = new RecordToken <PalasoTestItem>(e.DataMapper, results1, new TestRepositoryId(8)); var rt2 = new RecordToken <PalasoTestItem>(e.DataMapper, results2, new TestRepositoryId(8)); var rtc = new RecordTokenComparer <PalasoTestItem>(new[] { sd1 }); int order = rtc.Compare(rt1, rt2); Assert.That(order, Is.Not.EqualTo(0)); } }
public void TryToRemoveAssociationWithListWordFromEntry_SenseHasExample_DoesNothing() { RecordToken <LexEntry> token = PrepareEntryWithOneMeaning(); //now tweak the entry LexEntry entry = token.RealObject; LexSense sense = entry.Senses[0]; LexExampleSentence ex = new LexExampleSentence(); sense.ExampleSentences.Add(ex); ex.Sentence.SetAlternative(VernWs.Id, "blah blah"); //now simulate removing it, as when the user wants to correct spelling Task.TryToRemoveAssociationWithListWordFromEntry(token); Assert.AreEqual(1, _lexEntryRepository.GetEntriesWithMatchingLexicalForm("uno", VernWs). Count); Assert.AreEqual(1, entry.Senses.Count); Assert.AreEqual("one", sense.Definition.GetExactAlternative(_glossingLanguageWSId), "should not remove the gloss"); Task.Deactivate(); }
/// <summary> /// Removes the sense (if otherwise empty) and deletes the entry if it has no reason left to live /// </summary> public void TryToRemoveAssociationWithListWordFromEntry(RecordToken <LexEntry> recordToken) { // have to iterate through these in reverse order // since they might get modified LexEntry entry = recordToken.RealObject; for (int i = entry.Senses.Count - 1; i >= 0; i--) { if (entry.Senses[i].Equals(CurrentTemplateSense)) { entry.Senses.RemoveAt(i); } } entry.CleanUpAfterEditting(); if (entry.IsEmptyExceptForLexemeFormForPurposesOfDeletion) { LexEntryRepository.DeleteItem(entry); } else { LexEntryRepository.SaveItem(entry); } }
public void ChangeSoMeetsFilter_AfterChangedSoNoLongerMeetsFilter_StaysHighlighted() { using ( var missingInfoControl = new MissingInfoControl(_missingTranslationRecordList, _viewTemplate, IsMissingTranslation, _lexEntryRepository, new TaskMemory())) { missingInfoControl.SetCurrentRecordToNext(); RecordToken <LexEntry> currentRecord = missingInfoControl.CurrentRecord; AddTranslationToEntry(missingInfoControl.CurrentEntry, "a bogus translation of example"); AddTranslationToEntry(missingInfoControl.CurrentEntry, string.Empty); Assert.AreEqual(missingInfoControl._todoRecordsListBox.SelectedItem, currentRecord); Assert.IsFalse( missingInfoControl._completedRecordsListBox.DataSource.Contains( currentRecord)); #if Visual DebugShowState(missingInfoControl, currentRecord); #endif } }
public int GetHomographNumber(LexEntry entry, WritingSystemDefinition headwordWritingSystem) { if (entry == null) { throw new ArgumentNullException("entry"); } if (headwordWritingSystem == null) { throw new ArgumentNullException("headwordWritingSystem"); } ResultSet <LexEntry> resultSet = GetAllEntriesSortedByHeadword(headwordWritingSystem); RecordToken <LexEntry> first = resultSet.FindFirst(entry); if (first == null) { throw new ArgumentOutOfRangeException("entry", entry, "Entry not in repository"); } if ((bool)first["HasHomograph"]) { return((int)first["HomographNumber"]); } return(0); }
public void Compare_KhmerWordsUsingDefaultCollation_ComparesNotEqual() { using (var e = new TestEnvironment()) { var ws = new WritingSystemDefinition("en") { DefaultCollation = new IcuRulesCollationDefinition("standard") }; var sd1 = new SortDefinition("Form", ws.DefaultCollation.Collator); var results1 = new Dictionary <string, object> { { "Form", "សង្ឃនៃអំបូរអឺរ៉ុន" } }; var results2 = new Dictionary <string, object> { { "Form", "បូជាចារ្យនៃអំបូរអឺរ៉ុន" } }; var rt1 = new RecordToken <PalasoTestItem>(e.DataMapper, results1, new TestRepositoryId(8)); var rt2 = new RecordToken <PalasoTestItem>(e.DataMapper, results2, new TestRepositoryId(8)); var rtc = new RecordTokenComparer <PalasoTestItem>(new[] { sd1 }); int order = rtc.Compare(rt1, rt2); Assert.That(order, Is.Not.EqualTo(0)); } }
/// <summary> /// Removes the sense (if otherwise empty) and deletes the entry if it has no reason left to live /// </summary> public void TryToRemoveAssociationWithListWordFromEntry(RecordToken<LexEntry> recordToken) { // have to iterate through these in reverse order // since they might get modified LexEntry entry = recordToken.RealObject; for (int i = entry.Senses.Count - 1;i >= 0;i--) { LexSense sense = entry.Senses[i]; if (sense.Gloss != null) { if (sense.Gloss.ContainsAlternative(_writingSystemIdForWordListWords)) { if (sense.Gloss[_writingSystemIdForWordListWords] == CurrentListWord) { //since we copy the gloss into the defniition, too, if that hasn't been //modified, then we don't want to let it being non-empty keep us from //removing the sense. We're trying to enable typo correcting. if (sense.Definition[_writingSystemIdForWordListWords] == CurrentListWord) { sense.Definition.SetAlternative(_writingSystemIdForWordListWords, null); sense.Definition.RemoveEmptyStuff(); } sense.Gloss.SetAlternative(_writingSystemIdForWordListWords, null); sense.Gloss.RemoveEmptyStuff(); if (!sense.IsEmptyForPurposesOfDeletion) { //removing the gloss didn't make it empty. So repent of removing the gloss. sense.Gloss.SetAlternative(_writingSystemIdForWordListWords, CurrentListWord); } } } } } entry.CleanUpAfterEditting(); if (entry.IsEmptyExceptForLexemeFormForPurposesOfDeletion) { LexEntryRepository.DeleteItem(entry); } else { LexEntryRepository.SaveItem(entry); } }
/// <summary> /// Gets a ResultSet containing all entries sorted by citation if one exists and otherwise /// by lexical form. /// Use "Form" to access the headword in a RecordToken. /// </summary> /// <param name="writingSystemDefinition"></param> /// <returns></returns> public ResultSet <LexEntry> GetAllEntriesSortedByHeadword(WritingSystemDefinition writingSystemDefinition) { if (writingSystemDefinition == null) { throw new ArgumentNullException("writingSystemDefinition"); } string cacheName = String.Format("sortedByHeadWord_{0}", writingSystemDefinition.LanguageTag); if (_caches[cacheName] == null) { var headWordQuery = new DelegateQuery <LexEntry>( delegate(LexEntry entryToQuery) { IDictionary <string, object> tokenFieldsAndValues = new Dictionary <string, object>(); string headWord = entryToQuery.VirtualHeadWord[writingSystemDefinition.LanguageTag]; if (String.IsNullOrEmpty(headWord)) { headWord = null; } tokenFieldsAndValues.Add("Form", headWord); return(new[] { tokenFieldsAndValues }); }); ResultSet <LexEntry> itemsMatching = _decoratedDataMapper.GetItemsMatching(headWordQuery); var sortOrder = new SortDefinition[4]; sortOrder[0] = new SortDefinition("Form", writingSystemDefinition.DefaultCollation.Collator); sortOrder[1] = new SortDefinition("OrderForRoundTripping", Comparer <int> .Default); sortOrder[2] = new SortDefinition("OrderInFile", Comparer <int> .Default); sortOrder[3] = new SortDefinition("CreationTime", Comparer <DateTime> .Default); _caches.Add(cacheName, new ResultSetCache <LexEntry>(this, sortOrder, itemsMatching, headWordQuery)); // _caches.Add(headWordQuery, /* itemsMatching */ results); // review cp Refactor caches to this signature. } ResultSet <LexEntry> resultsFromCache = _caches[cacheName].GetResultSet(); string previousHeadWord = null; int homographNumber = 1; RecordToken <LexEntry> previousToken = null; foreach (RecordToken <LexEntry> token in resultsFromCache) { // A null Form indicates there is no HeadWord in this writing system. // However, we need to ensure that we return all entries, so the AtLeastOne in the query // above ensures that we keep it in the result set with a null Form and null WritingSystemId. var currentHeadWord = (string)token["Form"]; if (string.IsNullOrEmpty(currentHeadWord)) { token["HasHomograph"] = false; token["HomographNumber"] = 0; continue; } if (currentHeadWord == previousHeadWord) { homographNumber++; } else { previousHeadWord = currentHeadWord; homographNumber = 1; } // only used to get our sort correct --This comment seems nonsensical --TA 2008-08-14!!! token["HomographNumber"] = homographNumber; switch (homographNumber) { case 1: token["HasHomograph"] = false; break; case 2: Debug.Assert(previousToken != null); previousToken["HasHomograph"] = true; token["HasHomograph"] = true; break; default: token["HasHomograph"] = true; break; } previousToken = token; } return(resultsFromCache); }
private static string GetTargetIdFromRecordToken(RecordToken <LexEntry> e) { return(e.RealObject.Id); }
public string GetDisplayLabel(object item) { RecordToken <LexEntry> kv = (RecordToken <LexEntry>)item; return((string)kv["Form"]); }
public void Setup() { this._testItem = new PalasoTestItem(); _repository = new TestRepository(this._testItem); this._token = new RecordToken <PalasoTestItem>(this._repository, new TestRepositoryId(8)); }
public RecordTokenToStringAdapter(string fieldToShow, RecordToken <T> recordToken) { _recordToken = recordToken; _fieldToShow = fieldToShow; }
private void DisassociateCurrentSemanticDomainFromEntry(RecordToken<LexEntry> recordToken) { // have to iterate through these in reverse order // since they might get modified LexEntry entry = recordToken.RealObject; for (int i = entry.Senses.Count - 1;i >= 0;i--) { LexSense sense = entry.Senses[i]; OptionRefCollection semanticDomains = sense.GetProperty<OptionRefCollection>(_semanticDomainField.FieldName); if (semanticDomains != null) { semanticDomains.Remove(CurrentDomainKey); } } entry.CleanUpAfterEditting(); if (entry.IsEmptyExceptForLexemeFormForPurposesOfDeletion) { LexEntryRepository.DeleteItem(entry); // if there are no senses left, get rid of it } else { LexEntryRepository.SaveItem(entry); } }
public void Setup() { dataMapper = new MemoryDataMapper <PalasoTestItem>(); Token = new RecordToken <PalasoTestItem>(dataMapper, new TestRepositoryId(8)); }
private void UpdatePreviousAndNextRecords() { int currentIndex = RecordListCurrentIndex; _previousRecord = (currentIndex > 0) ? _todoRecords[currentIndex - 1] : null; _nextRecord = (currentIndex < _todoRecords.Count - 1) ? _todoRecords[currentIndex + 1] : null; }