当前位置: 首页>>代码示例>>C#>>正文


C# FdoCache.TryGetVirtualHandler方法代码示例

本文整理汇总了C#中SIL.FieldWorks.FDO.FdoCache.TryGetVirtualHandler方法的典型用法代码示例。如果您正苦于以下问题:C# FdoCache.TryGetVirtualHandler方法的具体用法?C# FdoCache.TryGetVirtualHandler怎么用?C# FdoCache.TryGetVirtualHandler使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在SIL.FieldWorks.FDO.FdoCache的用法示例。


在下文中一共展示了FdoCache.TryGetVirtualHandler方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: 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;
			}
开发者ID:sillsdev,项目名称:WorldPad,代码行数:80,代码来源:StTxtPara.cs

示例2: SetupGhostOwningFlidInfo

		private void SetupGhostOwningFlidInfo(FdoCache cache, int ghostListFlid)
		{
			if (ghostListFlid == 0)
				return;
			IVwVirtualHandler vh;
			cache.TryGetVirtualHandler(ghostListFlid, out vh);
			m_vh = vh as FDOGhostSequencePropertyVirtualHandler;
			// the ghost owner is on the last level.
			m_cpiForOwningFlidForGhost = m_vh.RealOwningPath[m_vh.RealOwningPath.Count - 1];
		}
开发者ID:sillsdev,项目名称:WorldPad,代码行数:10,代码来源:BulkEditBar.cs

示例3: TryDeleteWordforms

		/// <summary>
		/// Try deleting wordforms when none of the given paragraphs have annotations (including dummies)
		/// with instances of the wordforms.
		/// </summary>
		/// <param name="cache"></param>
		/// <param name="wfIdsToTry">wordform ids to try to delete</param>
		/// <param name="hvoParasInView">the paragraphs that may have dummy annotations with instances of those wordforms</param>
		/// <param name="delObjIds">the wordforms that actually got deleted.</param>
		/// <returns>true if we deleted a wordform</returns>
		public static bool TryDeleteWordforms(FdoCache cache, int[] wfIdsToTry, int[] hvoParasInView, out Set<int> delObjIds)
		{
			int vtagSegments = StTxtPara.SegmentsFlid(cache);
			IVwVirtualHandler vh;
			cache.TryGetVirtualHandler(vtagSegments, out vh);
			FDOSequencePropertyVirtualHandler segmentsVh = vh as FDOSequencePropertyVirtualHandler;
			delObjIds = new Set<int>(wfIdsToTry.Length);
			foreach (int wfid in wfIdsToTry)
			{
				if (!cache.IsValidObject(wfid))
					continue;	// already been deleted, probably as a consequence of annotation.DeleteUnderlyingObject.
				ICmObject obj = CmObject.CreateFromDBObject(cache, wfid, false);
				if (obj.CanDelete)
				{
					// make a final check to see if any of the segment forms in the given paragraphs contain an
					// instance to this wordform. If not, it's safe to delete it.
					if (!WordformHasOccurrenceInParas(cache, wfid, hvoParasInView, segmentsVh))
						delObjIds.Add(wfid);
				}
			}
			foreach (WfiWordform wf in new FdoObjectSet<WfiWordform>(cache, delObjIds.ToArray(), false, typeof(WfiWordform)))
			{
				wf.DeleteUnderlyingObject();
			}
			return delObjIds.Count != 0;
		}
开发者ID:sillsdev,项目名称:WorldPad,代码行数:35,代码来源:StTxtPara.cs

示例4: CacheReplaceOneUndoAction

		/// <summary>
		/// Make one. Call DoIt to actually make the change.
		/// </summary>
		/// <param name="cache"></param>
		/// <param name="hvo"></param>
		/// <param name="flid"></param>
		/// <param name="ihvoMin"></param>
		/// <param name="ihvoLim"></param>
		/// <param name="newValues"></param>
		public CacheReplaceOneUndoAction(FdoCache cache, int hvo, int flid, int ihvoMin, int ihvoLim, int[] newValues)
		{
			m_cache = cache;
			m_sda = cache.MainCacheAccessor;
			m_hvo = hvo;
			m_flid = flid;
			IVwVirtualHandler vh;
			if (m_cache.TryGetVirtualHandler(m_flid, out vh))
			{
				m_bvh = vh as BaseVirtualHandler;
			}
			m_index = ihvoMin;
			m_newValues = newValues;
			m_cvDel = ihvoLim - ihvoMin;
			Debug.Assert(m_cvDel >= 0 && m_cvDel <= 1, "Currently only support deleting one item at a time.");
			if (m_cvDel > 0)
				m_oldValue = m_sda.get_VecItem(hvo, flid, ihvoMin);
		}
开发者ID:sillsdev,项目名称:WorldPad,代码行数:27,代码来源:FdoUndoActions.cs


注:本文中的SIL.FieldWorks.FDO.FdoCache.TryGetVirtualHandler方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。