/// <summary></summary> public void Setup(object o, IRecordListUpdater rlu) { CheckDisposed(); Debug.Assert(o != null && o is ReversalIndexEntry); ReversalIndexEntry rie = o as ReversalIndexEntry; if (m_rlu == null && rlu != null && m_rie == rie) { m_rlu = rlu; m_rlu.RecordChangeHandler = this; m_rlu.UpdateList(true); } else { m_rie = rie; Debug.Assert(m_rie != null); int ws = m_rie.ReversalIndex.WritingSystemRAHvo; m_originalForm = m_rie.ReversalForm.GetAlternative(ws); if (rlu != null) { m_rlu = rlu; m_rlu.RecordChangeHandler = this; } } }
public bool OnPromoteReversalindexEntry(object cmd) { //Command command = (Command) cmd; Slice slice = m_dataEntryForm.CurrentSlice; Debug.Assert(slice != null, "No slice was current"); if (slice != null) { FdoCache cache = m_dataEntryForm.Cache; IReversalIndexEntry entry = slice.Object as IReversalIndexEntry; int hvoNewOwner = cache.GetOwnerOfObject(entry.OwnerHVO); switch (cache.GetClassOfObject(hvoNewOwner)) { default: throw new ArgumentException("Illegal class."); case ReversalIndex.kclsidReversalIndex: { IReversalIndex ri = ReversalIndex.CreateFromDBObject(cache, hvoNewOwner); ri.EntriesOC.Add(entry); break; } case ReversalIndexEntry.kclsidReversalIndexEntry: { IReversalIndexEntry rie = ReversalIndexEntry.CreateFromDBObject(cache, hvoNewOwner); rie.SubentriesOC.Add(entry); break; } } // We may need to notify everyone that a virtual property changed. //NotifyVirtualChanged(cache, slice); } return(true); }
/// <summary> /// Executes in two distinct scenarios. /// /// 1. If disposing is true, the method has been called directly /// or indirectly by a user's code via the Dispose method. /// Both managed and unmanaged resources can be disposed. /// /// 2. If disposing is false, the method has been called by the /// runtime from inside the finalizer and you should not reference (access) /// other managed objects, as they already have been garbage collected. /// Only unmanaged resources can be disposed. /// </summary> /// <param name="disposing"></param> /// <remarks> /// If any exceptions are thrown, that is fine. /// If the method is being done in a finalizer, it will be ignored. /// If it is thrown by client code calling Dispose, /// it needs to be handled by fixing the bug. /// /// If subclasses override this method, they should call the base implementation. /// </remarks> protected virtual void Dispose(bool disposing) { //Debug.WriteLineIf(!disposing, "****************** " + GetType().Name + " 'disposing' is false. ******************"); // Must not be run more than once. if (m_isDisposed) { return; } if (disposing) { if (Disposed != null) { Disposed(this, new EventArgs()); } // Dispose managed resources here. if (m_rlu != null) { m_rlu.RecordChangeHandler = null; } } // Dispose unmanaged resources here, whether disposing is true or false. m_rie = null; m_originalForm = null; m_rlu = null; m_isDisposed = true; }
public bool OnMoveReversalindexEntry(object cmd) { using (ReversalEntryGoDlg dlg = new ReversalEntryGoDlg()) { Slice slice = m_dataEntryForm.CurrentSlice; Debug.Assert(slice != null, "No slice was current"); IReversalIndexEntry currentEntry = (IReversalIndexEntry)slice.Object; List <IReversalIndexEntry> filteredEntries = new List <IReversalIndexEntry>(); filteredEntries.Add(currentEntry); IReversalIndexEntry owningEntry = currentEntry.OwningEntry; if (owningEntry != null) { filteredEntries.Add(owningEntry); } WindowParams wp = new WindowParams(); wp.m_btnText = LexEdStrings.ks_MoveEntry; wp.m_label = LexEdStrings.ks_Find_; wp.m_title = LexEdStrings.ksMoveRevEntry; dlg.SetDlgInfo(m_mediator, wp, filteredEntries); // , true if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { FdoCache cache = (FdoCache)m_mediator.PropertyTable.GetValue("cache"); IReversalIndexEntry newOwner = ReversalIndexEntry.CreateFromDBObject(cache, dlg.SelectedID); cache.BeginUndoTask(LexEdStrings.ksUndoMoveRevEntry, LexEdStrings.ksRedoMoveRevEntry); ICmObject newOwningObj = newOwner.MoveIfNeeded(currentEntry); newOwner.SubentriesOC.Add(currentEntry); cache.EndUndoTask(); RecordClerk clerk = m_mediator.PropertyTable.GetValue("ActiveClerk") as RecordClerk; if (clerk != null) { clerk.RemoveItemsFor(currentEntry.Hvo); } // Note: PropChanged should happen on the old owner and the new in the 'Add" method call. // Have to jump to a main entry, as RecordClerk doesn't know anything about subentries. m_mediator.BroadcastMessageUntilHandled("JumpToRecord", newOwner.MainEntry.Hvo); } } return(true); }
private void RemoveReversalEntryFromSense() { if (m_selectedSenseHvo == 0) { return; // must be selecting multiple objects! (See LT-5724.) } int h1 = m_rootb.Height; ILexSense sense = LexSense.CreateFromDBObject(m_fdoCache, m_selectedSenseHvo); FdoReferenceCollection <IReversalIndexEntry> col = sense.ReversalEntriesRC; int oldCount = col.Count; m_fdoCache.BeginUndoTask(SIL.FieldWorks.XWorks.LexEd.LexEdStrings.ksUndoDeleteRevFromSense, SIL.FieldWorks.XWorks.LexEd.LexEdStrings.ksRedoDeleteRevFromSense); // Remove does a PropChanged on the main sense ReversalEntries property. sense.ReversalEntriesRC.Remove(m_rootObj.Hvo); // Update the ReferringSenses property, and do PropChanged on it. ReversalIndexEntry.ResetReferringSenses(m_fdoCache, m_rootObj.Hvo); m_fdoCache.EndUndoTask(); CheckViewSizeChanged(h1, m_rootb.Height); }
/// <summary> /// Execute the change requested by the current selection in the combo. /// Basically we want the PartOfSpeech indicated by m_selectedHvo, even if 0, /// to become the POS of each record that is appropriate to change. /// We do nothing to records where the check box is turned off, /// and nothing to ones that currently have an MSA other than an MoStemMsa. /// (a) If the owning entry has an MoStemMsa with the /// right POS, set the sense to use it. /// (b) If the sense already refers to an MoStemMsa, and any other senses /// of that entry which point at it are also to be changed, change the POS /// of the MSA. /// (c) If the entry has an MoStemMsa which is not used at all, change it to the /// required POS and use it. /// (d) Make a new MoStemMsa in the LexEntry with the required POS and point the sense at it. /// </summary> public override void DoIt(Set <int> itemsToChange, ProgressState state) { CheckDisposed(); m_cache.BeginUndoTask(LexEdStrings.ksUndoBulkEditRevPOS, LexEdStrings.ksRedoBulkEditRevPOS); BulkEditBar.ForceRefreshOnUndoRedo(m_cache.MainCacheAccessor); int i = 0; int interval = Math.Min(100, Math.Max(itemsToChange.Count / 50, 1)); foreach (int entryId in itemsToChange) { i++; if (i % interval == 0) { state.PercentDone = i * 80 / itemsToChange.Count + 20; state.Breath(); } IReversalIndexEntry entry = ReversalIndexEntry.CreateFromDBObject(m_cache, entryId); entry.PartOfSpeechRAHvo = m_selectedHvo; } m_cache.EndUndoTask(); }
public override void AddItem(int hvoNew) { CheckDisposed(); ILexSense selectedSense = LexSense.CreateFromDBObject(m_cache, hvoNew); FdoReferenceCollection <IReversalIndexEntry> col = selectedSense.ReversalEntriesRC; int hvoCurrentObj = m_obj.Hvo; int h1 = m_vectorRefView.RootBox.Height; if (!col.Contains(hvoCurrentObj)) { int oldCount = col.Count; m_cache.BeginUndoTask(LexEdStrings.ksUndoAddRevToSense, LexEdStrings.ksRedoAddRevToSense); // Does a PropChanged on the sense's ReversalEntries property. col.Add(hvoCurrentObj); // Update the ReferringSenses property, and do PropChanged on it. ReversalIndexEntry.ResetReferringSenses(m_cache, m_obj.Hvo); m_cache.EndUndoTask(); int h2 = m_vectorRefView.RootBox.Height; CheckViewSizeChanged(h1, h2); } }
/// <summary> /// Handles the xCore message to go to a reversal entry. /// </summary> /// <param name="argument">The xCore Command object.</param> /// <returns>true</returns> public bool OnGotoReversalEntry(object argument) { CheckDisposed(); using (ReversalEntryGoDlg dlg = new ReversalEntryGoDlg()) { List <IReversalIndexEntry> filteredEntries = new List <IReversalIndexEntry>(); filteredEntries.Add(Entry); WindowParams wp = new WindowParams(); wp.m_btnText = LexEdStrings.ks_GoTo; wp.m_label = LexEdStrings.ks_Find_; wp.m_title = LexEdStrings.ksFindRevEntry; dlg.SetDlgInfo(m_mediator, wp, filteredEntries); // , false if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // Can't Go to a subentry, so we have to go to its main entry. FdoCache cache = (FdoCache)m_mediator.PropertyTable.GetValue("cache"); IReversalIndexEntry selEntry = ReversalIndexEntry.CreateFromDBObject(cache, dlg.SelectedID); m_mediator.BroadcastMessageUntilHandled("JumpToRecord", selEntry.MainEntry.Hvo); } } return(true); }
protected override DummyCmObject GetMergeinfo(WindowParams wp, List <DummyCmObject> mergeCandidates, out string guiControl, out string helpTopic) { wp.m_title = FdoUiStrings.ksMergeReversalEntry; wp.m_label = FdoUiStrings.ksEntries; IReversalIndexEntry rie = ReversalIndexEntry.CreateFromDBObject(m_cache, Object.Hvo); int wsIndex = rie.ReversalIndex.WritingSystemRAHvo; foreach (int rieInnerHvo in rie.ReversalIndex.AllEntries) { IReversalIndexEntry rieInner = ReversalIndexEntry.CreateFromDBObject(m_cache, rieInnerHvo); if (rieInner.Hvo != Object.Hvo) { mergeCandidates.Add( new DummyCmObject( rieInner.Hvo, rieInner.ShortName, wsIndex)); } } guiControl = "MergeReversalEntryList"; helpTopic = "khtpMergeReversalEntry"; return(new DummyCmObject(m_hvo, rie.ShortName, wsIndex)); }