コード例 #1
0
ファイル: InfoPane.cs プロジェクト: bbriggs/FieldWorks
		private void InitializeInfoView(RecordClerk clerk)
		{
			if (m_mediator == null)
				return;
			var xnWindow = (XmlNode)m_mediator.PropertyTable.GetValue("WindowConfiguration");
			if (xnWindow == null)
				return;
			XmlNode xnControl = xnWindow.SelectSingleNode(
				"controls/parameters/guicontrol[@id=\"TextInformationPane\"]/control/parameters");
			if (xnControl == null)
				return;
			var activeClerk = m_mediator.PropertyTable.GetValue("ActiveClerk") as RecordClerk;
			var toolChoice = m_mediator.PropertyTable.GetStringProperty("currentContentControl", null);
			if(m_xrev != null)
			{
				//when re-using the infoview we want to remove and dispose of the old recordeditview and
				//associated datatree. (LT-13216)
				Controls.Remove(m_xrev);
				m_xrev.Dispose();
			}
			m_xrev = new InterlinearTextsRecordEditView(this);
			if (clerk.GetType().Name == "InterlinearTextsRecordClerk")
			{
				m_xrev.Clerk = clerk;
			}
			else
			{
				//We want to make sure that the following initialization line will initialize this
				//clerk if we haven't already set it. Without this assignment to null, the InfoPane
				//misbehaves in the Concordance view (it uses the filter from the InterlinearTexts view)
				m_xrev.Clerk = null;
			}
			m_xrev.Init(m_mediator, xnControl); // <-- This call will change the ActiveClerk
			DisplayCurrentRoot();
			m_xrev.Dock = DockStyle.Fill;
			Controls.Add(m_xrev);
			// There are times when moving to the InfoPane causes the wrong ActiveClerk to be set.
			// See FWR-3390 (and InterlinearTextsRecordClerk.OnDisplayInsertInterlinText).
			var activeClerkNew = m_mediator.PropertyTable.GetValue("ActiveClerk") as RecordClerk;
			if (toolChoice != "interlinearEdit" && activeClerk != null && activeClerk != activeClerkNew)
			{
				m_mediator.PropertyTable.SetProperty("ActiveClerk", activeClerk);
				activeClerk.ActivateUI(true);
			}
		}