A 'Decorator' class for the FDO ISilDataAccess implementation. This class allows for caching the 'fake' flids used in a browse view (i.e., flides used for the check box and selection, etc.).
Inheritance: SIL.FieldWorks.FDO.Application.DomainDataByFlidDecoratorBase
Ejemplo n.º 1
0
		public void SetAndAccessMultiStrings()
		{
			ITsStrFactory tsf = TsStrFactoryClass.Create();

			int kflid = XMLViewsDataCache.ktagEditColumnBase;
			int hvoRoot = 10578;
			int wsEng = Cache.WritingSystemFactory.GetWsFromStr("en");
			XMLViewsDataCache xmlCache = new XMLViewsDataCache(Cache.MainCacheAccessor as ISilDataAccessManaged, true, new Dictionary<int, int>());
			Notifiee recorder = new Notifiee();
			xmlCache.AddNotification(recorder);
			Assert.AreEqual(0, xmlCache.get_MultiStringAlt(hvoRoot, kflid, wsEng).Length);
			Assert.AreEqual(0, recorder.Changes.Count);
			ITsString test1 = tsf.MakeString("test1", wsEng);
			xmlCache.CacheMultiString(hvoRoot, kflid, wsEng, test1);
			Assert.AreEqual(0, recorder.Changes.Count);
			Assert.AreEqual(test1, xmlCache.get_MultiStringAlt(hvoRoot, kflid, wsEng));
			ITsString test2 = tsf.MakeString("blah", wsEng);
			xmlCache.SetMultiStringAlt(hvoRoot, kflid, wsEng, test2);
			Assert.AreEqual(test2, xmlCache.get_MultiStringAlt(hvoRoot, kflid, wsEng));


			recorder.CheckChanges(new ChangeInformationTest[] {new ChangeInformationTest(hvoRoot, kflid, wsEng, 0, 0)},
								  "expected PropChanged from setting string");
			xmlCache.RemoveNotification(recorder);

			// Enhance JohnT: a better test would verify that it doesn't intefere with other multistrings,
			// and that it can store stuff independently for different HVOs, tags, and WSs.
		}
Ejemplo n.º 2
0
		private bool SetDlgInfoPrivate(Mediator mediator, XmlNode configurationParameters)
		{
			using (new WaitCursor(this))
			{
				m_mediator = mediator;

				m_btnRefresh.Image = ResourceHelper.RefreshIcon;

				m_rbDiscardAnalyses.Checked = m_mediator.PropertyTable.GetBoolProperty("RemoveAnalyses", true);
				m_rbKeepAnalyses.Checked = !m_rbDiscardAnalyses.Checked;
				m_rbDiscardAnalyses.Click += m_rbDiscardAnalyses_Click;
				m_rbKeepAnalyses.Click += m_rbDiscardAnalyses_Click;

				m_cbUpdateLexicon.Checked = m_mediator.PropertyTable.GetBoolProperty("UpdateLexiconIfPossible", true);
				m_cbCopyAnalyses.Checked = m_mediator.PropertyTable.GetBoolProperty("CopyAnalysesToNewSpelling", true);
				m_cbCopyAnalyses.Click += m_cbCopyAnalyses_Click;
				m_cbMaintainCase.Checked = m_mediator.PropertyTable.GetBoolProperty("MaintainCaseOnChangeSpelling", true);
				m_cbMaintainCase.Click += m_cbMaintainCase_Click;
				m_cache = (FdoCache)m_mediator.PropertyTable.GetValue("cache");

				// 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 = WritingSystemServices.ActualWs(m_cache,
					WritingSystemServices.kwsFirstVern,
					m_srcwfiWordform.Hvo,
					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.)
				var vernForm = m_srcwfiWordform.Form.get_String(m_vernWs);
				if (vernForm == null || vernForm.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).RightToLeftScript)
				{
					m_cbNewSpelling.RightToLeft = RightToLeft.Yes;
				}
				m_cbNewSpelling.Tss = vernForm;
				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 += m_dstWordform_TextChanged;

				// Setup source browse view.
				var toolNode = configurationParameters.SelectSingleNode("controls/control[@id='srcSentences']/parameters");
				m_srcClerk = RecordClerkFactory.CreateClerk(m_mediator, toolNode, true);
				m_srcClerk.OwningObject = m_srcwfiWordform;
				m_sourceSentences.Init(m_mediator, toolNode);
				m_sourceSentences.CheckBoxChanged += sentences_CheckBoxChanged;
				m_specialSda = m_sourceSentences.BrowseViewer.SpecialCache;
				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 += btnMore_Click;
				m_sMoreButtonText = m_btnMore.Text;
				m_optionsPanel.Paint += m_optionsPanel_Paint;
				m_btnPreviewClear.Click += m_btnPreviewClear_Click;

				var specialMdc = m_specialSda.MetaDataCache;
				int fakeFlid = specialMdc.GetFieldId2(WfiWordformTags.kClassId, "Occurrences", false);
				int[] concordanceItems = m_specialSda.VecProp(m_srcwfiWordform.Hvo, fakeFlid);
				// (Re)set selected state in cache, so default behavior of checked is used.
				foreach (var concId in concordanceItems)
				{
					m_specialSda.SetInt(concId, m_sourceSentences.BrowseViewer.PreviewEnabledTag, 1);
					m_specialSda.SetInt(concId, XMLViewsDataCache.ktagItemSelected, 1);
				}
				// We initially check everything.
				var segmentRepos = m_cache.ServiceLocator.GetInstance<ISegmentRepository>();
				foreach (var hvo in m_sourceSentences.BrowseViewer.AllItems)
					m_enabledItems.Add(hvo);

				// 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;
				CheckForOtherOccurrences();
				SetEnabledState();
			}
			return true;
		}
Ejemplo n.º 3
0
		/// <summary>
		/// Normal constructor
		/// </summary>
		internal RespellUndoAction(XMLViewsDataCache sda, FdoCache cache, int vernWs,
			string oldSpelling, string newSpelling)
		{
			m_specialSda = sda;
			m_cache = cache;
			m_vernWs = vernWs;
			m_oldSpelling = oldSpelling;
			m_newSpelling = newSpelling;
		}
Ejemplo n.º 4
0
		/// <summary>
		/// Used in tests only at present, assumes default vernacular WS.
		/// </summary>
		/// <param name="cache"></param>
		/// <param name="oldSpelling"></param>
		/// <param name="newSpelling"></param>
		internal RespellUndoAction(XMLViewsDataCache sda, FdoCache cache, string oldSpelling, string newSpelling)
			:this(sda, cache, cache.DefaultVernWs, oldSpelling, newSpelling)
		{
		}
Ejemplo n.º 5
0
		private void tvSource_AfterSelect(object sender, TreeViewEventArgs e)
		{
			using (new WaitCursor(this, true))
			{
				// Swap out the browse view.
				if (m_currentBrowseView != null)
				{
					// Get rid of old one.
					m_currentBrowseView.Hide();
					m_pnlConcBrowseHolder.Controls.Remove(m_currentBrowseView);
					m_currentBrowseView.Dispose();
					m_currentBrowseView = null;
				}

				XmlNode configurationNode;
				RecordClerk clerk;
				var selObj = (IAnalysis)tvSource.SelectedNode.Tag;
				switch (selObj.ClassID)
				{
					default:
						throw new InvalidOperationException("Class not recognized.");
					case WfiWordformTags.kClassId:
						configurationNode = m_configurationNodes[WfiWordformTags.kClassId];
						clerk = m_recordClerks[WfiWordformTags.kClassId];
						break;
					case WfiAnalysisTags.kClassId:
						configurationNode = m_configurationNodes[WfiAnalysisTags.kClassId];
						clerk = m_recordClerks[WfiAnalysisTags.kClassId];
						break;
					case WfiGlossTags.kClassId:
						configurationNode = m_configurationNodes[WfiGlossTags.kClassId];
						clerk = m_recordClerks[WfiGlossTags.kClassId];
						break;
				}
				clerk.OwningObject = selObj;

				m_currentBrowseView = new RecordBrowseView();
				m_currentBrowseView.Init(m_mediator, configurationNode);
				// Ensure that the list gets updated whenever it's reloaded.  See LT-8661.
				var sPropName = clerk.Id + "_AlwaysRecomputeVirtualOnReloadList";
				m_mediator.PropertyTable.SetProperty(sPropName, true, false);
				m_mediator.PropertyTable.SetPropertyPersistence(sPropName, false);
				m_currentBrowseView.Dock = DockStyle.Fill;
				m_pnlConcBrowseHolder.Controls.Add(m_currentBrowseView);
				m_currentBrowseView.CheckBoxChanged += m_currentBrowseView_CheckBoxChanged;
				m_currentBrowseView.BrowseViewer.SelectionChanged += BrowseViewer_SelectionChanged;
				m_currentBrowseView.BrowseViewer.FilterChanged += BrowseViewer_FilterChanged;
				SetRecordStatus();

				m_specialSda = m_currentBrowseView.BrowseViewer.SpecialCache;
				var specialMdc = m_specialSda.MetaDataCache;
				int[] concordanceItems;
				switch (selObj.ClassID)
				{
					default:
						throw new InvalidOperationException("Class not recognized.");
					case WfiWordformTags.kClassId:
						m_currentSourceFakeFlid = specialMdc.GetFieldId2(WfiWordformTags.kClassId, "ExactOccurrences", false);
						concordanceItems = m_specialSda.VecProp(selObj.Hvo, m_currentSourceFakeFlid);
						break;
					case WfiAnalysisTags.kClassId:
						m_currentSourceFakeFlid = specialMdc.GetFieldId2(WfiAnalysisTags.kClassId, "ExactOccurrences", false);
						concordanceItems = m_specialSda.VecProp(selObj.Hvo, m_currentSourceFakeFlid);
						break;
					case WfiGlossTags.kClassId:
						m_currentSourceFakeFlid = specialMdc.GetFieldId2(WfiGlossTags.kClassId, "ExactOccurrences", false);
						concordanceItems = m_specialSda.VecProp(selObj.Hvo, m_currentSourceFakeFlid);
						break;
				}
				// (Re)set selected state in cache, so default behavior of checked is used.
				foreach (var concId in concordanceItems)
					m_specialSda.SetInt(concId, XMLViewsDataCache.ktagItemSelected, 1);

				// Set the initial value for the filtering status.
				var sFilterMsg = m_mediator.PropertyTable.GetStringProperty("DialogFilterStatus", String.Empty);
				if (sFilterMsg != null)
					sFilterMsg = sFilterMsg.Trim();
				SetFilterStatus(!String.IsNullOrEmpty(sFilterMsg));
				CheckAssignBtnEnabling();
			}
		}
Ejemplo n.º 6
0
		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose(bool disposing)
		{
			System.Diagnostics.Debug.WriteLineIf(!disposing, "****** Missing Dispose() call for " + GetType().Name + ". ****** ");
			if (IsDisposed)
				return;

			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
				foreach (RecordClerk clerk in m_recordClerks.Values)
				{
					// Take it out of the Mediator and Dispose it.
					m_mediator.PropertyTable.RemoveProperty("RecordClerk-" + clerk.Id);
					clerk.Dispose();
				}
				m_recordClerks.Clear();
				m_configurationNodes.Clear();
			}
			base.Dispose( disposing );

			m_wordform = null;
			m_cache = null;
			if (m_mediator != null)
				m_mediator.PropertyTable.RemoveProperty("IgnoreStatusPanel");
			m_mediator = null;
			m_configurationNode = null;
			m_currentBrowseView = null;
			m_specialSda = null;
		}