SIL.FieldWorks.IText.InterlinVc.AddFreeformComment C# (CSharp) Method

AddFreeformComment() protected method

protected AddFreeformComment ( IVwEnv vwenv, int hvoSeg, int lineChoiceIndex ) : void
vwenv IVwEnv
hvoSeg int
lineChoiceIndex int
return void
		protected virtual void AddFreeformComment(IVwEnv vwenv, int hvoSeg, int lineChoiceIndex)
		{
			int[] wssAnalysis = m_lineChoices.AdjacentWssAtIndex(lineChoiceIndex);
			if (wssAnalysis.Length == 0)
				return;
			vwenv.OpenDiv();
			SetParaDirectionAndAlignment(vwenv, wssAnalysis[0]);
			vwenv.OpenMappedPara();
			string label;
			int flid;
			InterlinearExporter exporter = vwenv as InterlinearExporter;
			int dummyFlid = m_lineChoices[lineChoiceIndex].Flid;
			switch (dummyFlid)
			{
				case InterlinLineChoices.kflidFreeTrans:
					label = ITextStrings.ksFree_;
					flid = SegmentTags.kflidFreeTranslation;
					if (exporter != null)
						exporter.FreeAnnotationType = "gls";
					break;
				case InterlinLineChoices.kflidLitTrans:
					label = ITextStrings.ksLit_;
					flid = SegmentTags.kflidLiteralTranslation;
					if (exporter != null)
						exporter.FreeAnnotationType = "lit";
					break;
				case InterlinLineChoices.kflidNote:
					label = ITextStrings.ksNote_;
					flid = NoteTags.kflidContent;
					if (exporter != null)
						exporter.FreeAnnotationType = "note";
					break;
				default:
					throw new Exception("Unexpected FF annotation type");
			}
			SetNoteLabelProps(vwenv);
			// REVIEW: Should we set the label to a special color as well?
			ITsString tssLabel = MakeUiElementString(label, m_cache.DefaultUserWs,
				propsBldr => propsBldr.SetIntPropValues((int)FwTextPropType.ktptBold,
				(int)FwTextPropVar.ktpvEnum, (int)FwTextToggleVal.kttvForceOn));
			ITsStrBldr labelBldr = tssLabel.GetBldr();
			AddLineIndexProperty(labelBldr, lineChoiceIndex);
			tssLabel = labelBldr.GetString();
			int labelWidth = 0;
			int labelHeight; // unused
			if (wssAnalysis.Length > 1)
				vwenv.get_StringWidth(tssLabel, null, out labelWidth, out labelHeight);
			if (IsWsRtl(wssAnalysis[0]) != m_fRtl)
			{
				ITsStrBldr bldr = tssLabel.GetBldr();
				bldr.Replace(bldr.Length - 1, bldr.Length, null, null);
				ITsString tssLabelNoSpace = bldr.GetString();
				// (First) analysis language is upstream; insert label at end.
				AddTssDirForWs(vwenv, wssAnalysis[0]);
				AddFreeformComment(vwenv, hvoSeg, wssAnalysis[0], flid);
				AddTssDirForWs(vwenv, wssAnalysis[0]);
				if (wssAnalysis.Length != 1)
				{
					// Insert WS label for first line
					AddTssDirForVernWs(vwenv);
					vwenv.AddString(m_tssSpace);
					AddTssDirForVernWs(vwenv);
					SetNoteLabelProps(vwenv);
					vwenv.AddString(WsListManager.WsLabel(m_cache, wssAnalysis[0]));
				}
				AddTssDirForVernWs(vwenv);
				vwenv.AddString(m_tssSpace);
				AddTssDirForVernWs(vwenv);
				vwenv.AddString(tssLabelNoSpace);
				AddTssDirForVernWs(vwenv);
			}
			else
			{
				AddTssDirForVernWs(vwenv);
				vwenv.AddString(tssLabel);
				AddTssDirForVernWs(vwenv);
				if (wssAnalysis.Length == 1)
				{
					AddTssDirForWs(vwenv, wssAnalysis[0]);
					AddFreeformComment(vwenv, hvoSeg, wssAnalysis[0], flid);
				}
				else
				{
					SetNoteLabelProps(vwenv);
					vwenv.AddString(WsListManager.WsLabel(m_cache, wssAnalysis[0]));
					AddTssDirForVernWs(vwenv);
					vwenv.AddString(m_tssSpace);
					// label width unfortunately does not include trailing space.
					AddTssDirForVernWs(vwenv);
					AddTssDirForWs(vwenv, wssAnalysis[0]);
					AddFreeformComment(vwenv, hvoSeg, wssAnalysis[0], flid);
				}
			}
			// Add any other lines, each in its appropriate direction.
			for (int i = 1; i < wssAnalysis.Length; i++)
			{
				vwenv.CloseParagraph();
				// Indent subsequent paragraphs by the width of the main label.
				if (IsWsRtl(wssAnalysis[i]) != m_fRtl)
				{
					vwenv.set_IntProperty((int)FwTextPropType.ktptTrailingIndent,
										  (int)FwTextPropVar.ktpvMilliPoint, labelWidth);
				}
				else
				{
					vwenv.set_IntProperty((int) FwTextPropType.ktptLeadingIndent,
										  (int) FwTextPropVar.ktpvMilliPoint, labelWidth);
				}
				SetParaDirectionAndAlignment(vwenv, wssAnalysis[i]);
				vwenv.OpenParagraph();
				if (IsWsRtl(wssAnalysis[i]) != m_fRtl)
				{
					// upstream...reverse everything.
					AddTssDirForWs(vwenv, wssAnalysis[i]);
					AddFreeformComment(vwenv, hvoSeg, wssAnalysis[i], flid);
					AddTssDirForWs(vwenv, wssAnalysis[i]);
					AddTssDirForVernWs(vwenv);
					vwenv.AddString(m_tssSpace);
					AddTssDirForVernWs(vwenv);
					AddTssDirForVernWs(vwenv);
					SetNoteLabelProps(vwenv);
					vwenv.AddString(WsListManager.WsLabel(m_cache, wssAnalysis[i]));
					AddTssDirForVernWs(vwenv);
					vwenv.AddString(m_tssSpace);
					AddTssDirForVernWs(vwenv);
				}
				else
				{
					AddTssDirForVernWs(vwenv);
					vwenv.AddString(m_tssSpace);
					AddTssDirForVernWs(vwenv);
					SetNoteLabelProps(vwenv);
					vwenv.AddString(WsListManager.WsLabel(m_cache, wssAnalysis[i]));
					AddTssDirForVernWs(vwenv);
					vwenv.AddString(m_tssSpace);
					AddTssDirForVernWs(vwenv);
					AddTssDirForWs(vwenv, wssAnalysis[i]);
					AddFreeformComment(vwenv, hvoSeg, wssAnalysis[i], flid);
				}
			}


			vwenv.CloseParagraph();
			vwenv.CloseDiv();
		}

Same methods

InterlinVc::AddFreeformComment ( IVwEnv vwenv, int hvo, int ws, int flidTarget ) : void