本文整理汇总了C#中SIL.FieldWorks.FDO.FdoCache.IsDummyObject方法的典型用法代码示例。如果您正苦于以下问题:C# FdoCache.IsDummyObject方法的具体用法?C# FdoCache.IsDummyObject怎么用?C# FdoCache.IsDummyObject使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SIL.FieldWorks.FDO.FdoCache
的用法示例。
在下文中一共展示了FdoCache.IsDummyObject方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ActiveWordform
/// <summary>
/// Try to find a WfiWordform object corresponding the the focus selection.
/// If successful return its guid, otherwise, return Guid.Empty.
/// </summary>
/// <returns></returns>
internal static Guid ActiveWordform(FdoCache cache, Mediator mediator)
{
IApp app = mediator.PropertyTable.GetValue("App") as IApp;
if (app == null)
return Guid.Empty;
IFwMainWnd window = app.ActiveMainWindow as IFwMainWnd;
if (window == null)
return Guid.Empty;
IRootSite activeView = window.ActiveView;
if (activeView == null)
return Guid.Empty;
List<IVwRootBox> roots = activeView.AllRootBoxes();
if (roots.Count < 1)
return Guid.Empty;
SelectionHelper helper = SelectionHelper.Create(roots[0].Site);
if (helper == null)
return Guid.Empty;
ITsString word = helper.SelectedWord;
if (word == null || word.Length == 0)
return Guid.Empty;
#if WANTPORT // FWR-2784
int hvoWordform = cache.LangProject.WordformInventoryOA.GetWordformId(word);
if (hvoWordform == 0 || cache.IsDummyObject(hvoWordform))
return Guid.Empty;
return cache.GetGuidFromId(hvoWordform);
#else
return Guid.Empty;
#endif
}
示例2: ConvertBaseAnnotationToReal
/// <summary>
///
/// </summary>
/// <param name="fdoCache"></param>
/// <param name="dummyAnnHvo"></param>
/// <returns></returns>
public static ICmBaseAnnotation ConvertBaseAnnotationToReal(FdoCache fdoCache, int dummyAnnHvo)
{
using (SuppressSubTasks supressActionHandler = new SuppressSubTasks(fdoCache, true))
{
Debug.Assert(fdoCache.IsDummyObject(dummyAnnHvo));
if (!fdoCache.IsDummyObject(dummyAnnHvo) ||
fdoCache.GetClassOfObject(dummyAnnHvo) != CmBaseAnnotation.kclsidCmBaseAnnotation)
{
return null; // indicate no change.
}
ISilDataAccess sda = fdoCache.MainCacheAccessor;
ICmBaseAnnotation cbaDummy = (ICmBaseAnnotation)CmObject.CreateFromDBObject(fdoCache, dummyAnnHvo, false);
ICmBaseAnnotation cbaReal = CreateRealAnnotation(fdoCache, cbaDummy.AnnotationTypeRAHvo, cbaDummy.InstanceOfRAHvo,
cbaDummy.BeginObjectRAHvo, cbaDummy.Flid, cbaDummy.BeginOffset, cbaDummy.EndOffset);
cbaReal.WritingSystemRAHvo = cbaDummy.WritingSystemRAHvo;
int hvoRealAnn = cbaReal.Hvo;
// transfer any default analysis (guess)
int ktagTwficDefault = StTxtPara.TwficDefaultFlid(fdoCache);
int hvoTwficAnalysisGuess = fdoCache.GetObjProperty(dummyAnnHvo, ktagTwficDefault);
if (hvoTwficAnalysisGuess != 0)
{
fdoCache.VwCacheDaAccessor.CacheObjProp(hvoRealAnn, ktagTwficDefault, hvoTwficAnalysisGuess);
}
int textSegType = CmAnnotationDefn.TextSegment(fdoCache).Hvo;
int twficType = CmAnnotationDefn.Twfic(fdoCache).Hvo;
if (cbaDummy.AnnotationTypeRAHvo == twficType)
StTxtPara.CacheReplaceTWFICAnnotation(fdoCache, dummyAnnHvo, hvoRealAnn);
else if (cbaDummy.AnnotationTypeRAHvo == textSegType)
StTxtPara.CacheReplaceTextSegmentAnnotation(fdoCache, dummyAnnHvo, hvoRealAnn);
else
Debug.Assert(true, "CacheReplace does not yet support annotation type " + cbaDummy.AnnotationTypeRAHvo);
// now clear it from the cache, since we're done with it.
if (fdoCache.ActionHandlerAccessor != null)
fdoCache.ActionHandlerAccessor.AddAction(new ClearInfoOnCommitUndoAction(fdoCache, dummyAnnHvo));
return cbaReal;
}
}
示例3: FindOrCreateWordform
/// <summary>
///
/// </summary>
/// <param name="cache"></param>
/// <param name="form"></param>
/// <param name="ws"></param>
/// <param name="fMakeReal">if true, returns a real wordform.
/// if false, it creates/returns a dummy if it can't find a real one.</param>
/// <returns></returns>
public static int FindOrCreateWordform(FdoCache cache, string form, int ws, bool fMakeReal)
{
int wfHvo = FindExistingWordform(form, ws, cache);
IWfiWordform wf = null;
if (fMakeReal && cache.IsDummyObject(wfHvo))
{
// convert this to a real object.
wf = CmObject.ConvertDummyToReal(cache, wfHvo) as IWfiWordform;
wfHvo = wf.Hvo;
}
if (wfHvo == 0)
{
// Give up looking for one, and just make a new one.
if (fMakeReal)
{
wf = cache.LangProject.WordformInventoryOA.AddRealWordform(form, ws);
wfHvo = wf.Hvo;
Debug.Assert(wfHvo > 0);
}
else
{
wfHvo = cache.LangProject.WordformInventoryOA.AddDummyWordform(CreateWordformTss(form, ws));
}
}
return wfHvo;
}
示例4: SetCbaFields
/// <summary>
///
/// </summary>
/// <param name="cache"></param>
/// <param name="hvoAnnotation"></param>
/// <param name="ichMin"></param>
/// <param name="ichLim"></param>
/// <param name="hvoPara"></param>
/// <param name="fNewAnnotation"></param>
public static void SetCbaFields(FdoCache cache, int hvoAnnotation, int ichMin, int ichLim, int hvoPara, bool fNewAnnotation)
{
if (ichMin < 0 || ichLim < 0)
throw new ArgumentException("new offsets (" + ichMin + ", " + ichLim + ") will extend cba offsets beyond paragraph limits.");
bool fIsDummyAnnotation = cache.IsDummyObject(hvoAnnotation);
// Adjust the character offsets whether an old or new annotation, but to reduce database
// traffic, only if they've changed.
ISilDataAccess sda = cache.MainCacheAccessor;
IVwCacheDa cda = cache.VwCacheDaAccessor;
if (fNewAnnotation || sda.get_IntProp(hvoAnnotation, (int)CmBaseAnnotation.CmBaseAnnotationTags.kflidBeginOffset) != ichMin)
{
if (!fIsDummyAnnotation)
sda.SetInt(hvoAnnotation, (int)CmBaseAnnotation.CmBaseAnnotationTags.kflidBeginOffset, ichMin);
else
cda.CacheIntProp(hvoAnnotation, (int)CmBaseAnnotation.CmBaseAnnotationTags.kflidBeginOffset, ichMin);
}
if (fNewAnnotation || sda.get_IntProp(hvoAnnotation, (int)CmBaseAnnotation.CmBaseAnnotationTags.kflidEndOffset) != ichLim)
{
if (!fIsDummyAnnotation)
sda.SetInt(hvoAnnotation, (int)CmBaseAnnotation.CmBaseAnnotationTags.kflidEndOffset, ichLim);
else
cda.CacheIntProp(hvoAnnotation, (int)CmBaseAnnotation.CmBaseAnnotationTags.kflidEndOffset, ichLim);
}
if (fNewAnnotation || sda.get_ObjectProp(hvoAnnotation, (int)CmBaseAnnotation.CmBaseAnnotationTags.kflidBeginObject) != hvoPara)
{
// They're always the same, so we can just set both.
if (!fIsDummyAnnotation)
{
sda.SetObjProp(hvoAnnotation, (int)CmBaseAnnotation.CmBaseAnnotationTags.kflidBeginObject, hvoPara);
sda.SetObjProp(hvoAnnotation, (int)CmBaseAnnotation.CmBaseAnnotationTags.kflidEndObject, hvoPara);
}
else
{
cda.CacheObjProp(hvoAnnotation, (int)CmBaseAnnotation.CmBaseAnnotationTags.kflidBeginObject, hvoPara);
cda.CacheObjProp(hvoAnnotation, (int)CmBaseAnnotation.CmBaseAnnotationTags.kflidEndObject, hvoPara);
}
}
}
示例5: CreateRealAnnotation
/// <summary>
///
/// </summary>
/// <param name="cache"></param>
/// <param name="hvoAnnType"></param>
/// <param name="hvoInstanceOf"></param>
/// <param name="hvoBeginObject"></param>
/// <param name="flid"></param>
/// <param name="beginOffset"></param>
/// <param name="endOffset"></param>
/// <returns></returns>
public static ICmBaseAnnotation CreateRealAnnotation(FdoCache cache, int hvoAnnType, int hvoInstanceOf, int hvoBeginObject, int flid, int beginOffset, int endOffset)
{
// This stored procedure is optimized to create an annotation with exactly the information we need here.
// string sql = "exec CreateCmBaseAnnotation " + cache.LangProject.Hvo + "," + hvoAnnType + "," + hvoInstanceOf + "," + hvoBeginObject
// + "," + flid + "," + beginOffset + "," + endOffset;
// @Owner int = null,
// @annotationType int = null,
// @InstanceOf int = null,
// @BeginObject int = null,
// @CmBaseAnnotation_Flid int = 0,
// @CmBaseAnnotation_BeginOffset int = 0,
// @CmBaseAnnotation_EndOffset int = 0
// DbOps.ExecuteStoredProc(cache, sql, null);
// can we assume that the object will be inserted at the end?
// Since we only create real annotations upon a 'confirm', using CmObject shouldn't be too expensive.
// The advantage of doing it this way is that we readily have the new hvo, and it does the PropChanged for us.
// (I think CreateCmBaseAnnotation would need to be enhanced to return the new hvo).
ICmBaseAnnotation cba = CreateUnownedCba(cache);
cba.Flid = flid;
cba.AnnotationTypeRAHvo = hvoAnnType;
if (cache.IsDummyObject(hvoInstanceOf))
{
// convert this to a real object.
ICmObject realInstanceOf = CmObject.ConvertDummyToReal(cache, hvoInstanceOf);
hvoInstanceOf = realInstanceOf.Hvo;
}
Debug.Assert(hvoInstanceOf >= 0, "dummy objects cannot be referenced by a real annotation");
cba.InstanceOfRAHvo = hvoInstanceOf;
SetCbaFields(cache, cba.Hvo, beginOffset, endOffset, hvoBeginObject, true);
return cba;
}
示例6: AnnotationsForInstanceOf
/// ------------------------------------------------------------------------------------
/// <summary>
/// Get all annotations that refer to the given object in the InstanceOf property,
/// and which do not have null for the BeginObject property.
/// </summary>
/// <param name="cache">The cache to use.</param>
/// <param name="hvo">The object that may have annotations.</param>
/// <returns>A List that contains zero, or more, integers for the values in the InstanceOf property.</returns>
/// ------------------------------------------------------------------------------------
public static List<int> AnnotationsForInstanceOf(FdoCache cache, int hvo)
{
Debug.Assert(!cache.IsDummyObject(hvo), "Currently only handles real objects.");
string qry = " select cba.Id" +
" from CmBaseAnnotation_ cba" +
" where cba.InstanceOf=? AND cba.BeginObject is not null";
return DbOps.ReadIntsFromCommand(cache, qry, hvo);
}
示例7: GetTwficWs
/// <summary>
/// get the ws at the twfic's BeginOffset in its paragraph.
/// </summary>
/// <param name="cache">The cache.</param>
/// <param name="hvoTwfic">The hvo twfic.</param>
/// <returns></returns>
/// ------------------------------------------------------------------------------------
public static int GetTwficWs(FdoCache cache, int hvoTwfic)
{
Debug.Assert(cache.IsValidObject(hvoTwfic, CmBaseAnnotation.kClassId),
String.Format("expected valid hvo({0}).", hvoTwfic));
if (hvoTwfic <= 0 && !cache.IsDummyObject(hvoTwfic))
throw new ArgumentException(String.Format("expected valid hvo({0}).", hvoTwfic));
int hvoPara = cache.GetObjProperty(hvoTwfic,
(int)CmBaseAnnotation.CmBaseAnnotationTags.kflidBeginObject);
int ichBeginOffset = cache.GetIntProperty(hvoTwfic,
(int)CmBaseAnnotation.CmBaseAnnotationTags.kflidBeginOffset);
int ws = GetWsAtParaOffset(cache, hvoPara, ichBeginOffset);
return ws;
}
示例8: LoadSegmentFreeTranslations
/// <summary>
/// Load the information we need to display a paragraph of free (back) translations: for each paragraph
/// load its segments, for each segment load the free translation. We assume the segments
/// property of each paragraph already exists, and want the BeginOffset, EndOffset, BeginObject, and Free Translation
/// properties of each segment, and the Comment of the FT.
/// Also ensures all the segments are real and have an FT annotation.
/// </summary>
/// <param name="paragraphs"></param>
/// <param name="cache"></param>
/// <param name="ws"></param>
public static void LoadSegmentFreeTranslations(int[] paragraphs, FdoCache cache, int ws)
{
int kflidSegments = SegmentsFlid(cache);
List<int> segments = new List<int>();
foreach (int hvoPara in paragraphs)
{
int[] segs = cache.GetVectorProperty(hvoPara, kflidSegments, true);
int iseg = 0;
foreach (int hvoSeg in segs)
{
int hvoRealSeg = hvoSeg;
if (cache.IsDummyObject(hvoSeg))
hvoRealSeg = CmBaseAnnotation.ConvertBaseAnnotationToReal(cache, hvoSeg).Hvo;
segments.Add(hvoRealSeg);
segs[iseg++] = hvoRealSeg;
}
// Update the list.
cache.VwCacheDaAccessor.CacheVecProp(hvoPara, kflidSegments, segs, segs.Length);
}
if (segments.Count == 0)
return; // somehow we can have none, and then the query fails.
int hvoFt = cache.GetIdFromGuid(LangProject.kguidAnnFreeTranslation);
string ids = JoinIds(segments.ToArray(), ",");
int kflidFT = SegmentFreeTranslationFlid(cache);
if (cache.DatabaseAccessor != null)
{
string sql =
@"select seg.id, seg.BeginObject, seg.BeginOffset, seg.EndOffset, ft.id, ft.class$, ft.UpdStmp, ftc.Txt, ftc.Fmt from CmBaseAnnotation seg
join CmIndirectAnnotation_AppliesTo ftseg on ftseg.Dst = seg.id
join CmIndirectAnnotation_ ft on ft.id = ftseg.Src and ft.AnnotationType = " +
hvoFt + @"
left outer join CmAnnotation_Comment ftc on ftc.Obj = ft.id and ftc.ws = " + ws +
@"
where seg.id in (" + ids + ")";
IDbColSpec dcs = DbColSpecClass.Create();
dcs.Push((int) DbColType.koctBaseId, 0, 0, 0); // ID (of segment)
dcs.Push((int) DbColType.koctObj, 1, (int) CmBaseAnnotation.CmBaseAnnotationTags.kflidBeginObject, 0);
dcs.Push((int) DbColType.koctInt, 1, (int) CmBaseAnnotation.CmBaseAnnotationTags.kflidBeginOffset, 0);
dcs.Push((int) DbColType.koctInt, 1, (int) CmBaseAnnotation.CmBaseAnnotationTags.kflidEndOffset, 0);
dcs.Push((int) DbColType.koctObj, 1, kflidFT, 0); // Free translation indirect annotation
dcs.Push((int) DbColType.koctInt, 5, (int) CmObjectFields.kflidCmObject_Class, 0); // class of FT annotation
dcs.Push((int) DbColType.koctTimeStamp, 5, 0, 0); // timestamp of FT annotation
dcs.Push((int)DbColType.koctMlsAlt, 5, (int)CmAnnotation.CmAnnotationTags.kflidComment, ws);
dcs.Push((int)DbColType.koctFmt, 5, (int)CmAnnotation.CmAnnotationTags.kflidComment, ws);
cache.LoadData(sql, dcs, 0);
}
// Make sure each segment has a free translation.
foreach (int hvoSeg in segments)
{
int hvoFT = cache.GetObjProperty(hvoSeg, kflidFT);
if (hvoFT == 0)
{
ICmIndirectAnnotation ann = CmIndirectAnnotation.CreateUnownedIndirectAnnotation(cache);
ann.AppliesToRS.Append(hvoSeg);
ann.AnnotationTypeRAHvo = hvoFt;
cache.VwCacheDaAccessor.CacheObjProp(hvoSeg, kflidFT, ann.Hvo);
}
}
}
示例9: CacheReplaceTWFICAnnotation
/// <summary>
/// Find a dummy segment wordform annotation, and replace with a real annotation it in the cache.
/// </summary>
/// <param name="cache"></param>
/// <param name="hvoOldAnnotation"></param>
/// <param name="hvoNewAnnotation"></param>
/// <returns>if nonzero, this will be inserted in place of the old one.
/// if zero, we'll simply delete the old one.</returns>
internal static void CacheReplaceTWFICAnnotation(FdoCache cache, int hvoOldAnnotation, int hvoNewAnnotation)
{
int ktagSegmentForms = CmBaseAnnotation.SegmentFormsFlid(cache);
int kflidOccurrences = WfiWordform.OccurrencesFlid(cache);
ISilDataAccess sda = cache.MainCacheAccessor;
int hvoParaSeg = 0;
int iParaSeg = -1;
bool fIsFirstTwfic = false;
int iSegForm = StTxtPara.TwficSegmentLocation(cache, hvoOldAnnotation, out hvoParaSeg, out iParaSeg, out fIsFirstTwfic);
IVwCacheDa cda = cache.VwCacheDaAccessor;
int[] newItems = hvoNewAnnotation != 0 ? new int[] { hvoNewAnnotation } : new int[0];
if (hvoParaSeg != 0 && iSegForm >= 0)
{
CacheReplaceOneUndoAction cacheReplaceSegmentFormAction = new CacheReplaceOneUndoAction(cache, hvoParaSeg,
ktagSegmentForms, iSegForm, iSegForm + 1, newItems);
cacheReplaceSegmentFormAction.DoIt();
if (cache.ActionHandlerAccessor != null)
{
cache.ActionHandlerAccessor.AddAction(cacheReplaceSegmentFormAction);
}
}
int hvoOldWordform = 0;
if (WfiWordform.TryGetWfiWordformFromInstanceOf(cache, hvoOldAnnotation, out hvoOldWordform))
{
// replace the dummy annotation on its wordform, if we haven't already.
List<int> dummyAnnotations = new List<int>(cache.GetVectorProperty(hvoOldWordform, kflidOccurrences, true));
int iAnn = dummyAnnotations.IndexOf(hvoOldAnnotation);
if (iAnn >= 0)
{
CacheReplaceOneUndoAction cacheReplaceOccurrenceAction = new CacheReplaceOneUndoAction(cache, hvoOldWordform,
kflidOccurrences, iAnn, iAnn + 1, newItems);
cacheReplaceOccurrenceAction.DoIt();
if (cache.ActionHandlerAccessor != null)
{
cache.ActionHandlerAccessor.AddAction(cacheReplaceOccurrenceAction);
}
}
}
// try converting the owning segment to real, if we're converting the twfic to real.
if (hvoOldAnnotation != 0 && hvoNewAnnotation != 0 &&
cache.IsDummyObject(hvoOldAnnotation) && !cache.IsDummyObject(hvoNewAnnotation) &&
cache.IsDummyObject(hvoParaSeg))
{
hvoParaSeg = CmBaseAnnotation.ConvertBaseAnnotationToReal(cache, hvoParaSeg).Hvo;
}
}
示例10: TryGetSegmentRange
/// <summary>
/// Return the segment range in terms of the segment indexes of the BeginObject segment property of the given hvoCba.
/// </summary>
/// <param name="cache"></param>
/// <param name="hvoCba"></param>
/// <param name="iBeginSegment">zero-based index into segments</param>
/// <param name="iEndSegment">zero-based into segments</param>
/// <returns></returns>
static public bool TryGetSegmentRange(FdoCache cache, int hvoCba,
out int iBeginSegment, out int iEndSegment)
{
iBeginSegment = -1;
iEndSegment = -1;
int[] segments = null;
// if it's a twfic type, then use twfic info, otherwise find a segment range.
ICmBaseAnnotation cba = CmBaseAnnotation.CreateFromDBObject(cache, hvoCba);
int hvoPara = cba.BeginObjectRAHvo;
IVwVirtualHandler vh;
// first try to get the segments from our Segments virtual handler
// if that has not been loaded for the paragraph, try SegmentsIgnoreTwfics
// to save time.
if (cache.TryGetVirtualHandler(StTxtPara.SegmentsFlid(cache), out vh) &&
(vh as BaseFDOPropertyVirtualHandler).IsPropInCache(cache.MainCacheAccessor, hvoPara, 0))
{
if (cba.AnnotationTypeRAHvo != 0)
{
StTxtPara.TwficInfo twficInfo = new StTxtPara.TwficInfo(cache, hvoCba);
if (twficInfo.SegmentIndex >= 0)
{
iBeginSegment = twficInfo.SegmentIndex; // return zero-based index.
}
else if (!cache.IsDummyObject(hvoCba))
{
int segIndexLogical;
string sql = string.Format("exec GetSegmentIndex {0}, {1}", hvoCba, CmAnnotationDefn.TextSegment(cache).Hvo);
DbOps.ReadOneIntFromCommand(cache, sql, null, out segIndexLogical);
if (segIndexLogical > 0)
iBeginSegment = segIndexLogical - 1; // subtract 1 to get a zero-based index.
}
}
if (iBeginSegment < 0)
segments = cache.GetVectorProperty(hvoPara, vh.Tag, true);
}
else if (cache.TryGetVirtualHandler(StTxtPara.SegmentsIgnoreTwficsFlid(cache), out vh))
{
segments = cache.GetVectorProperty(hvoPara, vh.Tag, true);
}
if (iBeginSegment < 0)
{
// this is annotation into a paragraph (but may not be a twfic or exist in SegForms).
// if it's not a twfic, find a segment range.
ISilDataAccess sda = cache.MainCacheAccessor;
int ihvoSeg = 0;
int cbaBeginOffset = cba.BeginOffset;
int cbaEndOffset = cba.EndOffset;
for (; ihvoSeg < segments.Length; ihvoSeg++)
{
int segEndOffset = sda.get_IntProp(segments[ihvoSeg], (int)CmBaseAnnotation.CmBaseAnnotationTags.kflidEndOffset);
if (segEndOffset <= cbaBeginOffset)
{
continue;
}
else if (iBeginSegment < 0)
{
iBeginSegment = ihvoSeg;
}
if (segEndOffset > cbaEndOffset)
{
iEndSegment = ihvoSeg;
break; // we've passed our annotation's EndOffset, so the previous segment is the last one in range.
}
}
// ihvoSeg should now be one index passed the segment in our range. this eguals the logical segment number.
if (iBeginSegment >= 0 && iEndSegment == -1)
{
iEndSegment = ihvoSeg < segments.Length ? ihvoSeg - 1 : segments.Length - 1;
}
}
return iBeginSegment >= 0;
}
示例11: ActiveWordform
/// <summary>
/// Try to find a WfiWordform object corresponding the the focus selection.
/// If successful return its guid, otherwise, return Guid.Empty.
/// </summary>
/// <returns></returns>
internal static Guid ActiveWordform(FdoCache cache)
{
if (!(FwApp.App is FwXApp))
return Guid.Empty;
FwXWindow window = (FwApp.App as FwXApp).ActiveMainWindow as FwXWindow;
if (window == null)
return Guid.Empty;
IRootSite activeView = window.ActiveView;
if (activeView == null)
return Guid.Empty;
List<IVwRootBox> roots = activeView.AllRootBoxes();
if (roots.Count < 1)
return Guid.Empty;
SelectionHelper helper = SelectionHelper.Create(roots[0].Site);
if (helper == null)
return Guid.Empty;
ITsString word = helper.SelectedWord;
if (word == null || word.Length == 0)
return Guid.Empty;
int hvoWordform = cache.LangProject.WordformInventoryOA.GetWordformId(word);
if (hvoWordform == 0 || cache.IsDummyObject(hvoWordform))
return Guid.Empty;
return cache.GetGuidFromId(hvoWordform);
}
示例12: SetDlgInfo1
private bool SetDlgInfo1(Mediator mediator, XmlNode configurationParameters)
{
using (new WaitCursor(this))
{
m_mediator = mediator;
m_configurationParameters = configurationParameters;
m_btnRefresh.Image = SIL.FieldWorks.Resources.ResourceHelper.RefreshIcon;
m_rbDiscardAnalyses.Checked = m_mediator.PropertyTable.GetBoolProperty("RemoveAnalyses", true);
m_rbKeepAnalyses.Checked = !m_rbDiscardAnalyses.Checked;
m_rbDiscardAnalyses.Click += new EventHandler(m_rbDiscardAnalyses_Click);
m_rbKeepAnalyses.Click += new EventHandler(m_rbDiscardAnalyses_Click);
m_cbUpdateLexicon.Checked = m_mediator.PropertyTable.GetBoolProperty("UpdateLexiconIfPossible", true);
m_cbCopyAnalyses.Checked = m_mediator.PropertyTable.GetBoolProperty("CopyAnalysesToNewSpelling", true);
m_cbCopyAnalyses.Click += new EventHandler(m_cbCopyAnalyses_Click);
m_cbMaintainCase.Checked = m_mediator.PropertyTable.GetBoolProperty("MaintainCaseOnChangeSpelling", true);
m_cbMaintainCase.Click += new EventHandler(m_cbMaintainCase_Click);
m_cache = (FdoCache)m_mediator.PropertyTable.GetValue("cache");
m_cbNewSpelling.TextBox.MaxLength = m_cache.MaxFieldLength((int) WfiWordform.WfiWordformTags.kflidForm);
if (m_cache.IsDummyObject(m_srcwfiWordform.Hvo))
{
m_srcwfiWordform = (IWfiWordform)(m_cache.LangProject.WordformInventoryOA as WordformInventory).ConvertDummyToReal(WordformInventory.ConcordanceWordformsFlid(m_cache), m_srcwfiWordform.Hvo);
// wfClerk now has the defunct dummy wf, so it needs to be updated to include the new real wf.
if (m_wfClerk != null)
m_wfClerk.UpdateList(true);
}
// We need to use the 'best vern' ws,
// since that is what is showing in the Words-Analyses detail edit control.
// Access to this respeller dlg is currently (Jan. 2008) only via a context menu in the detail edit pane.
// The user may be showing multiple wordform WSes in the left hand browse view,
// but we have no way of knowing if the user thinks one of those alternatives is wrong without asking.
m_vernWs = m_cache.LangProject.ActualWs(
LangProject.kwsFirstVern,
m_srcwfiWordform.Hvo,
(int)WfiWordform.WfiWordformTags.kflidForm);
// Bail out if no vernacular writing system was found (see LT-8892).
Debug.Assert(m_vernWs != 0);
if (m_vernWs == 0)
return false;
// Bail out, rather than run into a null reference exception.
// (Should fix LT-7666.)
if (m_srcwfiWordform.Form.GetAlternativeTss(m_vernWs) == null || m_srcwfiWordform.Form.GetAlternativeTss(m_vernWs).Length == 0)
return false;
m_cbNewSpelling.WritingSystemFactory = m_cache.LanguageWritingSystemFactoryAccessor;
m_cbNewSpelling.WritingSystemCode = m_vernWs;
m_cbNewSpelling.StyleSheet = FontHeightAdjuster.StyleSheetFromMediator(m_mediator);
Debug.Assert(m_cbNewSpelling.StyleSheet != null); // if it is we get a HUGE default font (and can't get the correct size)
if (m_cbNewSpelling.WritingSystemFactory.get_EngineOrNull(m_vernWs).RightToLeft)
{
m_cbNewSpelling.RightToLeft = RightToLeft.Yes;
}
m_cbNewSpelling.Tss = m_srcwfiWordform.Form.GetAlternativeTss(m_vernWs);
m_cbNewSpelling.AdjustForStyleSheet(this, null, m_cbNewSpelling.StyleSheet);
if (!Application.RenderWithVisualStyles)
m_cbNewSpelling.Padding = new Padding(1, 2, 1, 1);
SetSuggestions();
m_btnApply.Enabled = false;
m_cbNewSpelling.TextChanged += new EventHandler(m_dstWordform_TextChanged);
// Setup source browse view.
XmlNode toolNode = configurationParameters.SelectSingleNode("controls/control[@id='srcSentences']/parameters");
m_srcClerk = RecordClerkFactory.CreateClerk(m_mediator, toolNode);
m_srcClerk.OwningObject = m_srcwfiWordform;
m_sourceSentences.Init(m_mediator, toolNode);
m_sourceSentences.CheckBoxChanged += new CheckBoxChangedEventHandler(sentences_CheckBoxChanged);
m_moreMinSize = Size;
m_moreMinSize.Height -= m_sourceSentences.Height / 2;
m_lessMinSize = m_moreMinSize;
m_lessMinSize.Height -= m_optionsPanel.Height;
AdjustHeightAndMinSize(Height - m_optionsPanel.Height, m_lessMinSize);
m_optionsPanel.Visible = false;
m_btnMore.Image = ResourceHelper.MoreButtonDoubleArrowIcon;
m_btnMore.Click += new EventHandler(btnMore_Click);
m_sMoreButtonText = m_btnMore.Text;
m_optionsPanel.Paint += new PaintEventHandler(m_optionsPanel_Paint);
m_btnPreviewClear.Click += new EventHandler(m_btnPreviewClear_Click);
// no good...code in MakeRoot of XmlBrowseView happens later and overrides. Control with
// selectionType attr in Xml configuration.
//m_sourceSentences.BrowseViewer.SelectedRowHighlighting = XmlBrowseViewBase.SelectionHighlighting.none;
m_lblExplainText = m_lblExplainDisabled.Text;
// We only reload the list when refresh is pressed.
m_srcClerk.ListLoadingSuppressed = true;
// We initially check everything.
m_enabledItems.AddRange(m_sourceSentences.BrowseViewer.AllItems);
foreach (int hvoCba in m_enabledItems)
{
m_cache.VwCacheDaAccessor.CacheIntProp(hvoCba, m_sourceSentences.BrowseViewer.PreviewEnabledTag, 1);
m_cache.VwCacheDaAccessor.CacheIntProp(hvoCba, XmlBrowseViewBaseVc.ktagItemSelected, 1);
}
//.........这里部分代码省略.........
示例13: InitExisting
/// ------------------------------------------------------------------------------------
/// <summary>
/// Initializes an instance of the CmObject class for an existing object. It will be
/// loaded if it has not already been.
/// </summary>
/// <param name="fcCache">fdoCache</param>
/// <param name="hvo">HVO</param>
/// ------------------------------------------------------------------------------------
protected void InitExisting(FdoCache fcCache, int hvo)
{
bool fCheckValidity = false;
#if DEBUG
if (s_checkValidity && !fcCache.IsDummyObject(hvo))
fCheckValidity = true;
#endif
// If the object's class is already cached, assume all the FDO preload data is too.
// Occasionally we will get a miss, where the class has been loaded some other way,
// but we will auto-load the properties actually used in that case, and on the other
// hand we save a huge amount of time not reloading objects we've already loaded.
bool fLoadIntoCache =
!fcCache.MainCacheAccessor.get_IsPropInCache(hvo, (int)CmObjectFields.kflidCmObject_Class,
(int)CellarModuleDefns.kcptInteger, 0);
InitExisting(fcCache, hvo, fCheckValidity, fLoadIntoCache);
}
示例14: ConvertDummyToReal
/// <summary>
/// Takes the information from a dummy object and allows its owner to create a real object in the database.
/// NOTE: after calling this, users need to make sure they no longer try to use the old hvoDummy object.
/// </summary>
/// <param name="fcCache"></param>
/// <param name="hvoDummy">id corresponding to the object to convert. Minimally it should have a class id cached
/// and an OwningFlid corresponding to a virtual handler that implements IDummyRequestConversion. </param>
/// <returns>real object based on new database entry created for the dummy object,
/// null if conversion did not take place.</returns>
public static ICmObject ConvertDummyToReal(FdoCache fcCache, int hvoDummy)
{
// suppress changes in display.
using (new IgnorePropChanged(fcCache, PropChangedHandling.SuppressView))
{
// This conversion should not be an undoable task, so suppress the action handler.
// (cf. LT-5330, LT-5417).
using (SuppressSubTasks supressActionHandler = new SuppressSubTasks(fcCache, true))
{
ICmObject realObj = null;
Debug.Assert(fcCache.IsDummyObject(hvoDummy));
if (fcCache.IsDummyObject(hvoDummy))
{
// see if we can convert this to a real object before loading it.
int owningFlid = fcCache.GetOwningFlidOfObject(hvoDummy);
IVwVirtualHandler vh = fcCache.VwCacheDaAccessor.GetVirtualHandlerId(owningFlid);
Debug.Assert(vh != null && vh is IDummyRequestConversion);
if (vh != null && vh is IDummyRequestConversion)
{
RequestConversionToRealEventArgs args = new RequestConversionToRealEventArgs(hvoDummy,
0, null, true);
args.OwningFlid = owningFlid;
(vh as IDummyRequestConversion).OnRequestConversionToReal(hvoDummy, args);
realObj = args.RealObject as ICmObject;
}
}
return realObj;
}
}
}
示例15: DeleteObjects
/// <summary>
/// Delete the objects which are the ids in the Set.
/// </summary>
public static void DeleteObjects(Set<int> idsToDel, FdoCache cache,
bool fRequiresFullRefreshOfViewInUndoRedo,
VwClearInfoAction vwClearInfoAction, bool fUndo, ProgressState state)
{
Set<int> realIdsToDel = new Set<int>();
foreach (int hvo in idsToDel)
{
if (cache.IsDummyObject(hvo))
continue; // don't try removing dummy object from cache. otherwise, you can't undo it.
realIdsToDel.Add(hvo);
}
if (realIdsToDel.Count == 0)
return;
if (fUndo && realIdsToDel.Count == 1 && fRequiresFullRefreshOfViewInUndoRedo || cache.DatabaseAccessor == null)
{
// Just one object...more efficient to to it directly, also, it lets many
// tests pass that would otherwise need a real database.
foreach (int hvo in realIdsToDel)
{
cache.DeleteObject(hvo);
}
}
else
{
IActionHandler acth = cache.ActionHandlerAccessor;
if (acth == null)
fUndo = false; // May be null if we are currently suppressing Subtasks
int iMin = 0;
int[] ids = realIdsToDel.ToArray();
int step = 50;
if (state != null)
{
// 600 4-digit ids, 500 5-digit ids, 428 6-digit ids, 375 7-digit ids
int cChunks = (ids.Length / 450) + 1;
step = 60 / cChunks;
if (step == 0)
step = 1;
}
while (iMin < ids.Length)
{
int iLim = iMin;
string hvoList = CmObject.MakePartialIdList(ref iLim, ids);
ObjectGroupUndoItem item;
if (iMin > 0 || iLim < ids.Length)
{
Set<int> idsDel = new Set<int>(iLim - iMin);
for (int i = iMin; i < iLim; ++i)
idsDel.Add(ids[i]);
item = new ObjectGroupUndoItem(idsDel, hvoList, cache,
fRequiresFullRefreshOfViewInUndoRedo, fUndo);
}
else
{
item = new ObjectGroupUndoItem(realIdsToDel, hvoList, cache,
fRequiresFullRefreshOfViewInUndoRedo, fUndo);
}
item.DoIt(vwClearInfoAction);
if (fUndo)
acth.AddAction(item);
if (state != null)
{
int percent = state.PercentDone + step;
state.PercentDone = percent;
state.Breath();
}
iMin = iLim;
}
}
}