private bool EnableNextButton()
		{
			AllowQuickFinishButton();	// this should be done atleast before each step
			bool rval = false;
			using (new WaitCursor(this))
			{
				switch (CurrentStepNumber)
				{
				case 1: // has to have a dictionary file to allow 'next'
					if (m_isPhaseInputFile || (m_DatabaseFileName.Text.Length > 0 &&
						System.IO.File.Exists(m_DatabaseFileName.Text) &&
						m_SaveAsFileName.Text != m_sMDFImportMap))		// not same as MDFImport.map file
					{
						rval = true;
					}
					break;

				case 2:	// preparing to display the languages info
					if (m_dirtyMapFile)
					{
						ReadLanguageInfoFromMapFile();
						m_processedMapFile = m_SettingsFileName.Text;
//						m_dirtyMapFile = false;
					}
					rval = true;

					// make sure there is a value for the 'Save as:' entry
					if (m_SaveAsFileName.Text.Length <= 0 && !m_isPhaseInputFile)
					{
						m_SaveAsFileName.Text = RemoveTheFileExtension(m_DatabaseFileName.Text) + "-import-settings.map";
					}
					break;

				case 3:
					// current technique for getting the custom fields in the DB
					bool customFieldsChanged = false;
					m_CustomFields = LexImportWizard.Wizard().ReadCustomFieldsFromDB(out customFieldsChanged);

					UpdateIfInputFileContentsChanged();
					if (m_dirtyInputFile || m_dirtyMapFile)
					{
						ReadMarkersFromDataFile();
						ReadIFMFromMapFile();	// do it now before setting the dirty map flag to false
						m_processedInputFile = m_DatabaseFileName.Text;
						m_lastDateTime = System.IO.File.GetLastWriteTime(m_processedInputFile);	// used to keep track of the last write date on the data file
						m_crcOfInputFile = m_crcObj.FileCRC(m_processedInputFile);		// the computed crc of the data file
						m_dirtyInputFile = false;
						m_dirtyMapFile = false;
						string topAnalysisWS = m_cache.LanguageWritingSystemFactoryAccessor.GetStrFromWs(m_cache.DefaultAnalWs);
						m_MappingMgr = new MarkerPresenter( /*m_cache,*/FwDirectoryFinder.CodeDirectory,
							LexImportWizard.Wizard().GetUILanguages(),
							topAnalysisWS,
							m_SettingsFileName.Text,
							m_DatabaseFileName.Text,
							m_sImportFields, 6);	// number of columns
						DisplayMarkerStep();
						m_FeasabilityReportGenerated = false;	// reset when intputs change
					}
					rval = true;
					break;

				case 4:
					UpdateIfInputFileContentsChanged();
					if (m_DirtyStep5 || true)
					{
						DisplayBeginMarkers();
						m_DirtyStep5 = false;
					}
					rval = Step5NextButtonEnabled();
					break;

				case 5:	// preparing to display the inline markers
//					if (true || m_hasShownIFMs)
					{
						//ReadIFMFromMapFile();
						DisplayInlineMarkers();
//						m_hasShownIFMs = true;
					}
					rval = true;
					break;

				case 6:
					rval = m_FeasabilityReportGenerated;
					break;

				default:
					rval = true;
					break;
				}
			}
			return rval;
		}
		public void Init(MarkerPresenter.ContentMapping currentMarker, Hashtable uiLangsHT, FdoCache cache,
			IHelpTopicProvider helpTopicProvider, IApp app, IVwStylesheet stylesheet)
		{
			CheckDisposed();

			m_uiLangs = uiLangsHT;
			m_cache = cache;
			m_helpTopicProvider = helpTopicProvider;
			m_app = app;
			m_stylesheet = stylesheet;
			helpProvider.HelpNamespace = helpTopicProvider.HelpFile;
			helpProvider.SetHelpKeyword(this, helpTopicProvider.GetHelpString(s_helpTopic));
			helpProvider.SetHelpNavigator(this, HelpNavigator.Topic);

			// The following call is needed to 'correct' the current behavior of the FwOverrideComboBox control.
			// As the control is currently, it will not allow the space character to be passed to the base
			// control: which means it doesn't get into the edit box portion of the control. We want to allow
			// space characters in our data, so we're enabling it here. This seems like a bug in the control
			// design, but not knowing the history and it's use, we'll just make it work as we think it should
			// be for us here.
			cbFunction.AllowSpaceInEditBox = true;

			// handle processing for the custom fields (CFS)
			// - read the db and get the CFS
			// - remove CFS that are in the TV and not in the CFS list
			// - add CFS that are in the list and not in the TV
			// - handle the case where the current marker is a CF and it's no longer in the list (just throw for now)

			//ReadCustomFieldsFromDB(cache);
			bool customFieldsChanged = false;
			m_customFields = LexImportWizard.Wizard().ReadCustomFieldsFromDB(out customFieldsChanged);

			// Init will only be called the first time, so here we don't have to remove an nodes

			tvDestination.BeginUpdate();
			foreach (TreeNode classNameNode in tvDestination.Nodes)
			{
				string className = classNameNode.Text.Trim(new char[] {'(', ')'});
				if (m_customFields.FieldsForClass(className) == null)
					continue;

				foreach (LexImportField field in m_customFields.FieldsForClass(className))
				{
					TreeNode cnode = new TreeNode(field.UIName + " (Custom Field)");
					cnode.Tag = field;
					classNameNode.Nodes.Add(cnode);
				}
				//tvDestination.Nodes.Add(tnode);
			}
			//tvDestination.ExpandAll();
			tvDestination.EndUpdate();

			// end of CFS processing

			// set the correct marker and number of times it is used
			m_lblMarker.Text = currentMarker.Marker;
			m_lblInstances.Text = String.Format(LexTextControls.ksXInstances, currentMarker.Count);

			if (currentMarker.AutoImport)
			{
				chkbxAutoField.Checked = true;
				tvDestination.Enabled = false;
			}

			// chkbxExclude.Checked = false;
			// tvDestination.Enabled = true;
			// find the node that has the tag.meaningid value the same as the currentmarker
			bool found = false;
			foreach (TreeNode classNode in tvDestination.Nodes)
			{
				if (currentMarker.ClsFieldDescription is ClsCustomFieldDescription &&
					currentMarker.DestinationClass != classNode.Text.Trim(new char[] {'(', ')'}))
					continue;

				foreach (TreeNode fieldNode in classNode.Nodes)
				{
					if ((fieldNode.Tag as LexImportField).ID == currentMarker.FwId)
					{
						tvDestination.SelectedNode = fieldNode;
						found = true;
						break;
					}
				}
				if (found)
					break;
			}
			if (!found && tvDestination.Nodes.Count > 0)	// make first entry topmost and visible
				tvDestination.Nodes[0].EnsureVisible();

			// set the writing system combo box
			foreach (DictionaryEntry lang in m_uiLangs)
			{
				LanguageInfoUI langInfo = lang.Value as LanguageInfoUI;
				// make sure there is only one entry for each writing system (especially 'ignore')
				if (cbLangDesc.FindStringExact(langInfo.ToString()) < 0)
				{
					cbLangDesc.Items.Add(langInfo);
					if (langInfo.FwName == currentMarker.WritingSystem)
						cbLangDesc.SelectedItem = langInfo;
				}
			}
			if (cbLangDesc.SelectedIndex < 0)
			{
				// default to ignore if it's in the list
				int ignorePos = cbLangDesc.FindStringExact(MarkerPresenter.ContentMapping.Ignore());
				if (ignorePos >= 0)
					cbLangDesc.SelectedIndex = ignorePos;
				else
					cbLangDesc.SelectedIndex = 0;	// first item in list as fail safe
			}

			// add the func if it's present
			m_refFuncString = string.Empty;
			if (currentMarker.IsRefField)
			{
				m_refFuncString = currentMarker.RefField;

				cbFunction.Enabled = true;

				TreeNode node = tvDestination.SelectedNode;
				if (node != null)
				{
					LexImportField field = node.Tag as LexImportField;
					if (field != null)
					{
						FillLexicalRefTypesCombo(field);
						// walk the name to abbr list and select the name
						string name = m_refFuncString;
						foreach (DictionaryEntry de in m_htNameToAbbr)
						{
							NameWSandAbbr nwsa = (NameWSandAbbr)de.Value;
							//if (de.Value as string == name)
							if (nwsa.abbr == name)
							{
								//name = de.Key as string;
								name = nwsa.name;	//.abbr;
								break;
							}
						}
						cbFunction.Text = name;
					}
				}
			}
			m_refFuncStringOrig = m_refFuncString;	// save the initial value

			// set the exclude chkbox and select item from FW Destination
			if (currentMarker.Exclude)// currentMarker.IsLangIgnore || // currentMarker.DestinationField == MarkerPresenter.ContentMapping.Ignore() ||
			{
				chkbxExclude.Checked = true;
				chkbxAutoField.Enabled = false;
				tvDestination.Enabled = false;
				EnableLangDesc(false);
			}

			rbAbbrName.Checked = true;
			if (currentMarker.IsAbbrvField)
			{
				// set the proper radio button
				if (currentMarker.ClsFieldDescription.IsAbbr)
					rbAbbrAbbr.Checked = true;
			}

			// LT-4722
			// btnAddCustomField.Visible = false;
		}