using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
using VEPROMS.Properties;
using DescriptiveEnum;
using DevComponents.DotNetBar;
using DevComponents.DotNetBar.Controls;
using Volian.Controls.Library;
using System.Xml;
using Csla;
namespace VEPROMS
{
    public partial class frmProcedureProperties : DevComponents.DotNetBar.Office2007Form
    {
        private bool _Initializing = false;
        private string _DefaultFormatName = null;
        //private string _DefaultPagination = null;
        private string _DefaultWatermark = null;
        private string _DefaultChgBarType = null;
        private string _DefaultChgBarLoc = null;
        private string _DefaultChgBarText = null;
        private string _DefaultChgBarUsrMsg1 = null;
        private string _DefaultChgBarUsrMsg2 = null;
        private string _DefaultFormatColumns = null;
        private bool _DefaultDisableDuplex = false;
        private ProcedureConfig _ProcedureConfig;
        private StepTabRibbon _MyStepTabRibbon;
        public frmProcedureProperties(ProcedureConfig procedureConfig)
        {
            _ProcedureConfig = procedureConfig;
            _Initializing = true;
            InitializeComponent();
            btnGeneral.PerformClick();  // always start with General tab or button
            _Initializing = false;
            // build the title bar caption
            //this.Text = string.Format("{0}  {1} Properties", procedureConfig.Number, procedureConfig.Title);
            ItemInfo itmInfo = ItemInfo.Get(_ProcedureConfig.MyProcedure.ItemID);
            this.Text = string.Format("{0}  {1} Properties", itmInfo.DisplayNumber, itmInfo.DisplayText);
            ppProcTitleStpRTB.Font = ppProcTitleStpRTB.FormatFont = new System.Drawing.Font("Microsoft Sans Serif", 10F);
            ppProcTitleStpRTB.FieldToEdit = E_FieldToEdit.Text;
            ppProcTitleStpRTB.BorderStyle = BorderStyle.Fixed3D;
            ppProcTitleStpRTB.MyItemInfo = itmInfo;
            ppProcTitleStpRTB.RefreshDisplay(true);
            ppProcNumStpRTB.Font = ppProcNumStpRTB.FormatFont = new System.Drawing.Font("Microsoft Sans Serif", 10F);
            ppProcNumStpRTB.FieldToEdit = E_FieldToEdit.Number;
            ppProcNumStpRTB.BorderStyle = BorderStyle.Fixed3D;
            ppProcNumStpRTB.MyItemInfo = itmInfo;
            ppProcNumStpRTB.RefreshDisplay(true);
            _MyStepTabRibbon = new StepTabRibbon();
            //_MyStepTabRibbon.Dock = System.Windows.Forms.DockStyle.Top;
            //_MyStepTabRibbon.Location = new System.Drawing.Point(0, 0);
            _MyStepTabRibbon.Name = "displayTabRibbon1";
            _MyStepTabRibbon.Visible = false;
            //defaultSettingsVisiblity();
        }
        private void ppBtnOK_Click(object sender, EventArgs e)
        {
            procedureConfigBindingSource.EndEdit();
            // Save Default settings for User
            //
            // Save whether we should display the default values on this property page
            Settings.Default.ShowDefaultProcedureProp = ppCbShwDefSettings.Checked;
            Settings.Default.Save();
            _ProcedureConfig.Print_NotInMergeAll = cbNotIncludeInMerged.Checked;
            _ProcedureConfig.MyProcedure.Save().Dispose();
            SaveText(ppProcTitleStpRTB);
            SaveText(ppProcNumStpRTB);
            _ProcedureConfig.MyProcedure.MyProcedureInfo.CreateEnhanced = cbEnhanced.Checked;
            // if there is a change to the format, clean up any overridden formats that point to the selected item before saving the format change:
            // To determine a change to the format, first see if selection changed in list and then see if the format selected does not match
            // what was set on procedure, if necessary resolve for an inherited format.
            if (_ProcedureConfig.MyProcedure.MyProcedureInfo.ActiveFormat != null &&
                _ProcedureConfig.MyProcedure.MyProcedureInfo.ActiveFormat.FormatID != _cmbxformatOriginal)
            {
                // clean up & then refresh the configs
                using (ContentInfoList cil = ContentInfoList.ClearOverrideFormatsByItem(_ProcedureConfig.MyProcedure.ItemID, _cmbxformatOriginal, _ProcedureConfig.MyProcedure.MyProcedureInfo.ActiveFormat.FormatID))
                {
                    foreach (ContentInfo ci in cil)
                    {
                        using (Content c = ci.Get())
                        {
                            // first refresh configs because the ContentInfo.Refresh causes events to occur that refresh screen
                            // and if configs aren't done first, the screen refresh, if based on config data, will not be correct.
                            foreach (ItemInfo ii in ci.ContentItems) ii.RefreshConfig();
                            ContentInfo.Refresh(c);
                        }
                    }
                }
            }
            DialogResult = DialogResult.OK;
            this.Close();
        }
        public void SaveText(StepRTB myStepRTB)
        {
            if (myStepRTB.ReadOnly) return;
            if (!myStepRTB.ActiveMode) return;
            if (!myStepRTB.IsDirty && myStepRTB.Text.Contains("(Resolved Transition Text)") == false) return;
            bool success = myStepRTB.OrigDisplayText.Save((RichTextBox)myStepRTB);
            if (success)
            {
                myStepRTB.FindAllLinks();
                myStepRTB.OrigRTF = myStepRTB.Rtf;
                myStepRTB.ClearUndo();
            }
        }
        private void ppBtnCancel_Click(object sender, EventArgs e)
        {
            procedureConfigBindingSource.CancelEdit();
            _ProcedureConfig.MyProcedure.MyProcedureInfo.CreateEnhanced = false;
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }
        /// 
        /// Use the ParentLookup to grab the default values
        ///  - set the watermark property (where applicable) of the control with that value
        ///  - set the default setting labels with that value
        /// ** the default setting labels appear when the Show Default Values checkbox is checked by the user.
        /// 
        private void FindDefaultValues()
        {
            _ProcedureConfig.ParentLookup = true;
            // Get the default format name
            _DefaultFormatName = _ProcedureConfig.DefaultFormatSelection;
            SetupDefault(_DefaultFormatName, ppLblFormatDefault, ppCmbxFormat);
            // Get the default Change Bar Type
            _DefaultChgBarType = _ProcedureConfig.Print_ChangeBar.ToString();
            SetupDefault(EnumDescConverter.GetEnumDescription(_ProcedureConfig.Print_ChangeBar), ppLblChangeBarTypeDefault, ppCmbxChangeBarType);
            // Get the default Change Bar Location
            _DefaultChgBarLoc = _ProcedureConfig.Print_ChangeBarLoc.ToString();
            SetupDefault(EnumDescConverter.GetEnumDescription(_ProcedureConfig.Print_ChangeBarLoc), ppLblChgBarPosDefault, ppCmbxChgBarPos);
            // Get the default Change Bar text
            _DefaultChgBarText = _ProcedureConfig.Print_ChangeBarText.ToString();
            SetupDefault(EnumDescConverter.GetEnumDescription(_ProcedureConfig.Print_ChangeBarText), ppLblChgBarTxtTypeDefault, ppCmbxChgBarTxtType);
            // Get the default User Change Bar Message 1
            _DefaultChgBarUsrMsg1 = _ProcedureConfig.Print_UserCBMess1;
            if (!(_DefaultChgBarUsrMsg1.Equals("")))
                ppLblChgBarUserMsgOneDefault.Text = string.Format("({0})", _DefaultChgBarUsrMsg1);
            // Get the default User Change Bar Message 2
            _DefaultChgBarUsrMsg2 = _ProcedureConfig.Print_UserCBMess2;
            if (!(_DefaultChgBarUsrMsg2.Equals("")))
                ppLblChgBarUserMsgTwoDefault.Text = string.Format("({0})", _DefaultChgBarUsrMsg2);
            // Get the default Print Pagination
            //_DefaultPagination = _ProcedureConfig.Print_Pagination.ToString();
            //SetupDefault(EnumDescConverter.GetEnumDescription(_ProcedureConfig.Print_Pagination), ppLblPaginationDefault, ppCmbxPagination);
            // Get the default Watermark
            _DefaultWatermark = _ProcedureConfig.Print_Watermark.ToString();
            SetupDefault(EnumDescConverter.GetEnumDescription(_ProcedureConfig.Print_Watermark), ppLblWatermarkDefault, ppCmbxWatermark);
            // Get the default Format Columns
            _DefaultFormatColumns = _ProcedureConfig.Format_Columns.ToString();
            SetupDefault(EnumDescConverter.GetEnumDescription(_ProcedureConfig.Format_Columns), ppLblStpEditorColsDefault, ppCmbxStpEditorCols);
            _ProcedureConfig.ParentLookup = false;
        }
        private int? _cmbxformatOriginal = null;
        private void frmProcedureProperties_Load(object sender, EventArgs e)
        {
            _Initializing = true;
            procedureConfigBindingSource.DataSource = _ProcedureConfig;
            //formatInfoListBindingSource.DataSource = FormatInfoList.Get();
            ppCmbxFormat.DataSource = null;
            ppCmbxFormat.DisplayMember = "FullName";
            ppCmbxFormat.ValueMember = "FullName";
            //C2023-017: Retrieves a filtered list of formats for the current plant
            ppCmbxFormat.DataSource = FormatUtility.GetFilteredFormatList(FormatInfoList.SortedFormatInfoList);
            if (_ProcedureConfig.MyProcedure.MyProcedureInfo.ActiveFormat != null) _cmbxformatOriginal = _ProcedureConfig.MyProcedure.MyProcedureInfo.ActiveFormat.FormatID;
            if (_ProcedureConfig.FormatSelection != null)
                ppCmbxFormat.SelectedValue = _ProcedureConfig.FormatSelection;
            else
                ppCmbxFormat.SelectedIndex = -1;
            // Get the saved settings for this user
            //
            // This setting tells us if we should display the default values on this property page
            ppCbShwDefSettings.Checked = (Settings.Default["ShowDefaultProcedureProp"] != null) ? Settings.Default.ShowDefaultProcedureProp : false;
            // Get the User's property page style "PropPageStyle" (this is a system wide user setting)
            // 1 - Button Dialog (default)
            // 2 - Tab Dialog
            if ((int)Settings.Default["PropPageStyle"] == (int)PropPgStyle.Tab)
            {
                tcProcProp.TabsVisible = true;
                panProcBtns.Visible = false;
                this.Width -= panProcBtns.Width;
            }
            // Get the default values for the property page information
            FindDefaultValues();
            // if we are creating a new procedure, initially set the format to the default format
            if (_ProcedureConfig.CreatingNew)// .FormatSelection == null)
                ppCmbxFormat.SelectedValue = _ProcedureConfig.DefaultFormatSelection;
            // Assign the data sources to the combo boxes
            ppCmbxChgBarPos.DataSource = EnumDetail.Details();
            ppCmbxChgBarPos.DisplayMember = "Description";
            ppCmbxChgBarPos.ValueMember = "EValue";
            ppCmbxChgBarPos.SelectedIndex = -1;
            ppCmbxChgBarTxtType.DataSource = EnumDetail.Details();
            ppCmbxChgBarTxtType.DisplayMember = "Description";
            ppCmbxChgBarTxtType.ValueMember = "EValue";
            ppCmbxChgBarTxtType.SelectedIndex = -1;
            ppCmbxChangeBarType.DataSource = EnumDetail.Details();
            ppCmbxChangeBarType.DisplayMember = "Description";
            ppCmbxChangeBarType.ValueMember = "EValue";
            ppCmbxChangeBarType.SelectedIndex = -1;
            //ppCmbxPagination.DataSource = EnumDetail.Details();
            //ppCmbxPagination.DisplayMember = "Description";
            //ppCmbxPagination.ValueMember = "EValue";
            //ppCmbxPagination.SelectedIndex = -1;
            ppCmbxWatermark.DataSource = EnumDetail.Details();
            ppCmbxWatermark.DisplayMember = "Description";
            ppCmbxWatermark.ValueMember = "EValue";
            ppCmbxWatermark.SelectedIndex = -1;
            ppCmbxStpEditorCols.DataSource = EnumDetail.Details();
            ppCmbxStpEditorCols.DisplayMember = "Description";
            ppCmbxStpEditorCols.ValueMember = "EValue";
            ppCmbxStpEditorCols.SelectedIndex = -1;
            // the only time the create enhanced checkbox is visisble is if this is a 'New' procedure in a set that is the 'Source'.
            cbEnhanced.Visible = false;
            DocVersionConfig dvc = _ProcedureConfig.MyProcedure.MyProcedureInfo.MyDocVersion.MyConfig as DocVersionConfig;
            if (_ProcedureConfig.CreatingNew && dvc != null && dvc.MyEnhancedDocuments != null && dvc.MyEnhancedDocuments.Count > 0 && dvc.MyEnhancedDocuments[0].Type != 0)
                cbEnhanced.Visible = true;
            cbNotIncludeInMerged.Checked = _ProcedureConfig.Print_NotInMergeAll;
            _Initializing = false;
        }
        #region General tab
        /// 
        /// This is the General button used on the button interface design
        /// 
        /// object
        /// EventArgs
        private void btnGeneral_Click(object sender, EventArgs e)
        {
            ProcessButtonClick(tiGeneral, btnGeneral);
        }
        /// 
        /// Selection in Default Column Mode combo box changed.
        /// 
        /// object
        /// EventArgs
        private void ppCmbxStpEditorCols_SelectedValueChanged(object sender, EventArgs e)
        {
            if (!_Initializing)
            {
                FormatColumns fc = (FormatColumns)Enum.Parse(typeof(FormatColumns), _DefaultFormatColumns);
                ProcessCmbxSelectionEnumChanged(ppCmbxStpEditorCols, fc, ppBtnDefEdCols, ppLblStpEditorColsDefault);
                //if ((ppCmbxStpEditorCols.SelectedIndex != -1) && ppCmbxStpEditorCols.SelectedValue.Equals(fc))
                //{
                //    ppBtnDefEdCols.Focus();
                //    ppBtnDefEdCols.PerformClick();
                //}
                //ppBtnDefEdCols.Visible = ppCmbxStpEditorCols.SelectedValue != null;
                //ppLblStpEditorColsDefault.Visible = ppCbShwDefSettings.Checked && ppBtnDefEdCols.Visible;
                //tcpGeneral.Focus();
            }
        }
        #endregion
        #region Format Settings tab
        /// 
        /// This is the Format Settings button used on the button interface design
        /// 
        /// object
        /// EventArgs
        private void btnFmtStngs_Click(object sender, EventArgs e)
        {
            ProcessButtonClick(tiFmtStngs, btnFmtStngs);
            // added for code change C2017-004 - select default format in dropdown list
            if (_InitialIndex < -1) _InitialIndex = ppCmbxFormat.SelectedIndex; // save the current format selection (happens here when current section is set to the default format)
        }
        private void ppBtnDefaultFmt_Click(object sender, EventArgs e)
        {
            ppCmbxFormat.SelectedIndex = -1; //reset to the default Format setting
                                             //tcpFormatSettings.Focus();
        }
        // Commented out as part of code change C2017-004. this also makes it consistent with section properties
        /// 
        /// Selection in Format combo box changed.
        /// 
        /// object
        /// EventArgs
        //private void ppCmbxFormat_SelectedValueChanged(object sender, EventArgs e)
        //{
        //	ProcessCmbxSelectedValueChange(ppCmbxFormat, _DefaultFormatName, ppBtnDefaultFmt, ppLblFormatDefault);
        //}
        /// 
        /// Enable or disable the user specified change bar options base on the type
        /// of change bar selected.
        /// 
        private void setEnabledUserSpecifiedChgBarCombos(PrintChangeBar pcb)
        {
            //ppGpbxUserSpecCB.Enabled =
            //ppCmbxChgBarPos.Enabled =
            //ppCmbxChgBarTxtType.Enabled =
            //ppBtnDefaultCbPos.Enabled =
            //ppBtnDefCbTxtTyp.Enabled = (ppCmbxChangeBarType.SelectedValue != null &&
            //  ppCmbxChangeBarType.SelectedValue.Equals(ProcedureConfig.PrintChangeBar.WithUserSpecified)) ||
            //  (ppCmbxChangeBarType.SelectedValue == null && pcb.Equals(DocVersionConfig.PrintChangeBar.WithUserSpecified));
            ppGpbxUserSpecCB.Enabled = (ppCmbxChangeBarType.SelectedValue != null &&
                ppCmbxChangeBarType.SelectedValue.Equals(PrintChangeBar.WithUserSpecified)) ||
                (ppCmbxChangeBarType.SelectedValue == null && pcb.Equals(PrintChangeBar.WithUserSpecified));
        }
        /// 
        /// Selection in Change Bar combo box changed.
        /// 
        /// object
        /// EventArgs
        private void ppCmbxChangeBarType_SelectedValueChanged(object sender, EventArgs e)
        {
            //Console.WriteLine("### SelectedValueChanged");
            if (!_Initializing)
            {
                PrintChangeBar pcb = (PrintChangeBar)Enum.Parse(typeof(PrintChangeBar), _DefaultChgBarType);
                ProcessCmbxSelectionEnumChanged(ppCmbxChangeBarType, pcb, ppBtnDefaultChgBar, ppLblChangeBarTypeDefault);
                setEnabledUserSpecifiedChgBarCombos(pcb);
                //tcpFormatSettings.Focus();
            }
        }
        /// 
        /// Reset to the parent setting.
        /// Find the parent setting and assign it to _ProcedureConfig.PrintChangeBar.  
        /// This will force the database to be updated.
        /// 
        /// 
        /// 
        private void ppBtnDefaultChgBar_Click(object sender, EventArgs e)
        {
            // Get the parent setting
            PrintChangeBar pcb = (PrintChangeBar)Enum.Parse(typeof(PrintChangeBar), _DefaultChgBarType);
            // Compare parent setting with current setting
            //_Initializing = true;
            if (pcb != _ProcedureConfig.Print_ChangeBar)
                _ProcedureConfig.Print_ChangeBar = pcb; // this will force a database update (write)
            ppCmbxChangeBarType.SelectedIndex = -1;  //reset to the default Change Bar setting
                                                     //_Initializing = false;
                                                     //tcpFormatSettings.Focus();
        }
        /// 
        /// Selection in Change Bar Position combo box changed.
        /// 
        /// object
        /// EventArgs
        private void ppCmbxChgBarPos_SelectedValueChanged(object sender, EventArgs e)
        {
            if (!_Initializing)
            {
                PrintChangeBarLoc cbl = (PrintChangeBarLoc)Enum.Parse(typeof(PrintChangeBarLoc), _DefaultChgBarLoc);
                ProcessCmbxSelectionEnumChanged(ppCmbxChgBarPos, cbl, ppBtnDefaultCbPos, ppLblChgBarPosDefault);
                //tcpFormatSettings.Focus();
            }
        }
        /// 
        /// Reset to the parent setting.
        /// Find the parent setting and assign it to _ProcedureConfig.Print_ChangeBarLoc.  
        /// This will force the database to be updated.
        /// 
        /// 
        /// 
        private void ppBtnDefaultCbPos_Click(object sender, EventArgs e)
        {
            // Get the parent setting
            PrintChangeBarLoc cbl = (PrintChangeBarLoc)Enum.Parse(typeof(PrintChangeBarLoc), _DefaultChgBarLoc);
            // Compare parent setting with current setting
            if (cbl != _ProcedureConfig.Print_ChangeBarLoc)
                _ProcedureConfig.Print_ChangeBarLoc = cbl; // this will force a database update (write)
            ppCmbxChgBarPos.SelectedIndex = -1;  //reset to the default Change Bar Position setting
                                                 //tcpFormatSettings.Focus();
        }
        /// 
        /// Selection in Change Bar Text Type combo box changed.
        /// 
        /// object
        /// EventArgs
        private void ppCmbxChgBarTxtType_SelectedValueChanged(object sender, EventArgs e)
        {
            if (!_Initializing)
            {
                PrintChangeBarText cbt = (PrintChangeBarText)Enum.Parse(typeof(PrintChangeBarText), _DefaultChgBarText);
                ProcessCmbxSelectionEnumChanged(ppCmbxChgBarTxtType, cbt, ppBtnDefCbTxtTyp, ppLblChgBarTxtTypeDefault);
                setEnabledUserSpecifiedChgBarText();
                //tcpFormatSettings.Focus();
            }
        }
        /// 
        /// Reset to the parent setting.
        /// Find the parent setting and assign it to _ProcedureConfig.Print_ChangeBarText.  
        /// This will force the database to be updated.
        /// 
        /// 
        /// 
        private void ppBtnDefCbTxtTyp_Click(object sender, EventArgs e)
        {
            // Get the parent setting
            PrintChangeBarText cbt = (PrintChangeBarText)Enum.Parse(typeof(PrintChangeBarText), _DefaultChgBarText);
            // Compare parent setting with current setting
            if (cbt != _ProcedureConfig.Print_ChangeBarText)
                _ProcedureConfig.Print_ChangeBarText = cbt; // this will force a database update (write)
            ppCmbxChgBarTxtType.SelectedIndex = -1;  //reset to the default Change Bar Text Type setting
                                                     //tcpFormatSettings.Focus();
        }
        /// 
        /// Enable or disable the user specified change bar text based on the selected
        /// change bar text type (selected in the user specific change bar grouping)
        /// 
        private void setEnabledUserSpecifiedChgBarText()
        {
            //ppGpbxUserSpecTxt.Enabled =
            //ppTxbxChangeBarUserMsgOne.Enabled =
            //ppTxbxChgBarUserMsgTwo.Enabled =
            //ppBtnDefCbTxt1.Enabled =
            //ppBtnDefCbTxt2.Enabled = (ppCmbxChgBarTxtType.SelectedValue != null &&
            //ppCmbxChgBarTxtType.SelectedValue.Equals(ProcedureConfig.PrintChangeBarText.UserDef));
            // This string is used to check against our default setting to see if User Defined Changebar Text is active
            string decUserDef = PrintChangeBarText.UserDef.ToString();
            ppGpbxUserSpecTxt.Enabled = (ppCmbxChgBarTxtType.SelectedValue != null &&
            ppCmbxChgBarTxtType.SelectedValue.Equals(PrintChangeBarText.UserDef)) ||
            (ppCmbxChgBarTxtType.SelectedIndex == -1 && _DefaultChgBarText.Equals(decUserDef));
        }
        #endregion
        #region Output Settings tab
        /// 
        /// This is the Output Settings button used on the button interface design
        /// 
        /// object
        /// EventArgs
        private void btnOutputStngs_Click(object sender, EventArgs e)
        {
            ProcessButtonClick(tiOutputStngs, btnOutputStngs);
        }
        /// 
        /// Selection in Pagination combo box changed.
        /// 
        /// object
        /// EventArgs
        //private void ppCmbxPagination_SelectedValueChanged(object sender, EventArgs e)
        //{
        //    if (!_Initializing)
        //    {
        //        PrintPagination pgtn = (PrintPagination)Enum.Parse(typeof(PrintPagination), _DefaultPagination);
        //        ProcessCmbxSelectionEnumChanged(ppCmbxPagination, pgtn, ppBtnDefPagination, ppLblPaginationDefault);
        //        //tcpOutputSettings.Focus();
        //    }
        //}
        /// 
        /// Reset to the parent setting.
        /// Find the parent setting and assign it to _ProcedureConfig.Print_Pagination.  
        /// This will force the database to be updated.
        /// 
        /// 
        /// 
        //private void ppBtnDefPagination_Click(object sender, EventArgs e)
        //{
        //    // Get the parent setting
        //    PrintPagination pgtn = (PrintPagination)Enum.Parse(typeof(PrintPagination), _DefaultPagination);
        //    // Compare parent setting with current setting
        //    if (pgtn != _ProcedureConfig.Print_Pagination)
        //        _ProcedureConfig.Print_Pagination = pgtn; // this will force a database update (write)
        //    ppCmbxPagination.SelectedIndex = -1;  //reset to the default Pagination setting
        //    //tcpOutputSettings.Focus();
        //}
        /// 
        /// Selection in Watermark combo box changed.
        /// 
        /// object
        /// EventArgs
        private void ppCmbxWatermark_SelectedValueChanged(object sender, EventArgs e)
        {
            if (!_Initializing)
            {
                PrintWatermark wtr = (PrintWatermark)Enum.Parse(typeof(PrintWatermark), _DefaultWatermark);
                ProcessCmbxSelectionEnumChanged(ppCmbxWatermark, wtr, ppBtnDefWatermark, ppLblWatermarkDefault);
                //tcpOutputSettings.Focus();
            }
        }
        /// 
        /// Reset to the parent setting.
        /// Find the parent setting and assign it to _ProcedureConfig.Print_Watermark.  
        /// This will force the database to be updated.
        /// 
        /// 
        /// 
        private void ppBtnDefWatermark_Click(object sender, EventArgs e)
        {
            // Get the parent setting
            PrintWatermark wtr = (PrintWatermark)Enum.Parse(typeof(PrintWatermark), _DefaultWatermark);
            // Compare parent setting with current setting
            if (wtr != _ProcedureConfig.Print_Watermark)
                _ProcedureConfig.Print_Watermark = wtr; // this will force a database update (write)
            ppCmbxWatermark.SelectedIndex = -1;  //reset to the default Watermark setting
        }
        #endregion
        #region View Settings tab
        ///// 
        ///// This is the View Settings button used on the button interface design
        ///// 
        ///// object
        ///// EventArgs
        //private void btnVwStngs_Click(object sender, EventArgs e)
        //{
        //    ProcessButtonClick(tiViewStngs, btnVwStngs);
        //}
        #endregion
        #region Generic functions used on this property page
        /// 
        /// Determines what labels (showing default values) are visable on the property pages
        /// 
        private void defaultSettingsVisiblity()
        {
            ppLblDefSettingsInfo.Visible = ppCbShwDefSettings.Checked;
            ppLblWatermarkDefault.Visible = ppCbShwDefSettings.Checked && ppBtnDefWatermark.Visible;
            //ppLblPaginationDefault.Visible = ppCbShwDefSettings.Checked && ppBtnDefPagination.Visible;
            ppLblStpEditorColsDefault.Visible = ppCbShwDefSettings.Checked && ppBtnDefEdCols.Visible;
            ppLblFormatDefault.Visible = ppCbShwDefSettings.Checked && ppBtnDefaultFmt.Visible;
            ppLblChangeBarTypeDefault.Visible = ppCbShwDefSettings.Checked && ppBtnDefaultChgBar.Visible;
            ppLblChgBarPosDefault.Visible = ppCbShwDefSettings.Checked && ppBtnDefaultCbPos.Visible;
            ppLblChgBarTxtTypeDefault.Visible = ppCbShwDefSettings.Checked && ppBtnDefCbTxtTyp.Visible;
            ppLblChgBarUserMsgOneDefault.Visible = ppCbShwDefSettings.Checked && ppBtnDefCbTxt1.Visible;
            ppLblChgBarUserMsgTwoDefault.Visible = ppCbShwDefSettings.Checked && ppBtnDefCbTxt2.Visible;
        }
        /// 
        /// Select the corresponding tab and set the button's state to checked
        /// 
        /// Property Page Tab
        /// Corresponding Property Page Button
        private void ProcessButtonClick(TabItem tab, ButtonX button)
        {
            ClearAllCheckedButtons();
            tcProcProp.SelectedTab = tab;
            button.Checked = true;
        }
        /// 
        /// For the Button Interface property page style, when a button is selected (pressed),
        /// it will remain in the checked state even when a different button is selected.  Thus
        /// we must clear the checked state of the buttons when a button is selected, then set
        /// the newly selected button's state to checked.
        /// 
        private void ClearAllCheckedButtons()
        {
            btnGeneral.Checked = false;
            btnFmtStngs.Checked = false;
            btnOutputStngs.Checked = false;
            //btnVwStngs.Checked = false;
        }
        /// 
        /// This is a generic Enter Event function for use with all of the property page tabs.
        /// Found that the visiblity value of buttons is not recorded until the property page in which it resides is diplayed.
        /// Thus we need to call defaultSettingVisiblity() to check and set visiblity states.
        /// 
        ///  type object
        /// type EventArgs
        private void tabpage_Enter(object sender, EventArgs e)
        {
            // Show or hide the labels containing the default values
            //if (!_Initializing)
            defaultSettingsVisiblity();
        }
        /// 
        /// Set the watermark and default label
        /// 
        /// The default text
        /// Label that displays the current default when view defaults is set
        /// Combo box with a watermark property
        private static void SetupDefault(string defaultText, Label lbl, ComboBoxEx cmbo)
        {
            if (defaultText != null && !(defaultText.Equals("")))
            {
                string deftext = string.Format("{0}", defaultText);
                lbl.Text = deftext;
                cmbo.WatermarkText = deftext;
            }
        }
        /// 
        /// Process a change in the enum combo box selection
        /// 
        /// Combo Box Name
        /// the default enum value
        /// button to reset to default value
        /// label containing the default
        private void ProcessCmbxSelectionEnumChanged(ComboBoxEx cmbx, object enumval, ButtonX button, Label deflabel)
        {
            if ((cmbx.SelectedIndex != -1) &&
                cmbx.SelectedValue.Equals(enumval))
            {
                _Initializing = true;
                button.Visible = true;
                button.Focus();
                button.PerformClick();
                cmbx.SelectedIndex = -1; // This will hide the Default button
                _Initializing = false;
            }
            button.Visible = (cmbx.SelectedValue != null);
            deflabel.Visible = ppCbShwDefSettings.Checked && button.Visible;
        }
        // Commented out as part of code change C2017-004 - select default format on dropdown
        ///// 
        ///// Process a change in the combo box selection
        ///// 
        ///// Combo Box Name
        ///// string containing default text
        ///// button to reset to default value
        ///// label containing the default
        //private void ProcessCmbxSelectedValueChange(ComboBoxEx cmbx, string defstr, ButtonX button, Label deflabel)
        //{
        //	if ((cmbx.SelectedIndex != -1) && defstr != null && defstr.Equals(cmbx.SelectedValue))
        //	{
        //		button.Visible = true;
        //		button.Focus();
        //		button.PerformClick();
        //	}
        //	button.Visible = cmbx.SelectedValue != null;
        //	deflabel.Visible = ppCbShwDefSettings.Checked && button.Visible;
        //}
        #endregion
        private void ppProcTitleStpRTB_Enter(object sender, EventArgs e)
        {
            _MyStepTabRibbon.MyStepRTB = ppProcTitleStpRTB;
        }
        private void ppProcNumStpRTB_Enter(object sender, EventArgs e)
        {
            _MyStepTabRibbon.MyStepRTB = ppProcNumStpRTB;
        }
        private void ppBtnDefCbTxt1_Click(object sender, EventArgs e)
        {
            // Compare default setting with current setting
            // Reset with the default and hide the default button and label
            if (_DefaultChgBarUsrMsg1 != _ProcedureConfig.Print_UserCBMess1)
            {
                _ProcedureConfig.Print_UserCBMess1 = _DefaultChgBarUsrMsg1;
                ppLblChgBarUserMsgOneDefault.Visible = false;
                ppBtnDefCbTxt1.Visible = false;
                //tcpFormatSettings.Focus();
            }
        }
        private void ppBtnDefCbTxt2_Click(object sender, EventArgs e)
        {
            // Compare default setting with current setting
            // Reset with the default and hide the default button and label
            if (_DefaultChgBarUsrMsg2 != _ProcedureConfig.Print_UserCBMess2)
            {
                _ProcedureConfig.Print_UserCBMess2 = _DefaultChgBarUsrMsg2;
                ppLblChgBarUserMsgTwoDefault.Visible = false;
                ppBtnDefCbTxt2.Visible = false;
                //tcpFormatSettings.Focus();
            }
        }
        private void ppBtnDefEdCols_Click(object sender, EventArgs e)
        {
            // Get the parent setting
            FormatColumns fc = (FormatColumns)Enum.Parse(typeof(FormatColumns), _DefaultFormatColumns);
            if (fc != _ProcedureConfig.Format_Columns)
                _ProcedureConfig.Format_Columns = fc; // this will force a database update (write)
            ppCmbxStpEditorCols.SelectedIndex = -1; //reset to the default
                                                    //tcpGeneral.Focus();
        }
        private void ppBtnDefWatermark_Click_1(object sender, EventArgs e)
        {
            // Get the parent setting
            PrintWatermark wtr = (PrintWatermark)Enum.Parse(typeof(PrintWatermark), _DefaultWatermark);
            // Compare parent setting with current setting
            if (wtr != _ProcedureConfig.Print_Watermark)
                _ProcedureConfig.Print_Watermark = wtr; // this will force a database update (write)
            ppCmbxWatermark.SelectedIndex = -1;
            //tcpOutputSettings.Focus();
        }
        private void ppTxbxChangeBarUserMsgOne_TextChanged(object sender, EventArgs e)
        {
            ppBtnDefCbTxt1.Visible = ((ppTxbxChangeBarUserMsgOne.Text != null) && !ppTxbxChangeBarUserMsgOne.Text.Equals(_DefaultChgBarUsrMsg1));
            ppLblChgBarUserMsgOneDefault.Visible = ppCbShwDefSettings.Checked && ppBtnDefCbTxt1.Visible;
            //tcpOutputSettings.Focus();
        }
        private void ppTxbxChgBarUserMsgTwo_TextChanged(object sender, EventArgs e)
        {
            ppBtnDefCbTxt2.Visible = ((ppTxbxChgBarUserMsgTwo.Text != null) && !ppTxbxChgBarUserMsgTwo.Text.Equals(_DefaultChgBarUsrMsg2));
            ppLblChgBarUserMsgTwoDefault.Visible = ppCbShwDefSettings.Checked && ppBtnDefCbTxt2.Visible;
            //tcpOutputSettings.Focus();
        }
        private void frmProcedureProperties_Shown(object sender, EventArgs e)
        {
            ppProcNumStpRTB.Focus();
        }
        private void ppCmbxFormat_DropDown(object sender, EventArgs e)
        {
            _Initializing = true;
            // C2017-004 - if using the default format, position the dropdown to the default format
            if (ppCmbxFormat.SelectedIndex == -1)
                ppCmbxFormat.SelectedValue = _DefaultFormatName;
            _Initializing = false;
        }
        private void ppCmbxFormat_DropDownClosed(object sender, EventArgs e)
        {
            // upon exit of the dropdown if the default format is selected - click the Default button
            if ((string)(ppCmbxFormat.SelectedValue) == _DefaultFormatName)
            {
                ppBtnDefaultFmt.PerformClick();
                btnFmtStngs.Focus();
            }
        }
        // added as part of code change C2017-004. this also makes it consistent with section properties
        int _InitialIndex = -2;
        private void ppCmbxFormat_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (_Initializing)
            {
                // determine if the default button and the default description text should visable
                ppBtnDefaultFmt.Visible = !(ppCmbxFormat.SelectedValue == null || ppCmbxFormat.SelectedIndex == -1);
                ppLblFormatDefault.Visible = ppCbShwDefSettings.Checked && ppBtnDefaultFmt.Visible;
                return;
            }
            if (_InitialIndex < -1) _InitialIndex = ppCmbxFormat.SelectedIndex; // save the current format selection (happens here when current section format is not the default section)
            if ((ppCmbxFormat.SelectedIndex != -1) && _DefaultFormatName != null && _DefaultFormatName.Equals(ppCmbxFormat.SelectedValue))
            {
                ppBtnDefaultFmt.Focus();
                ppBtnDefaultFmt.PerformClick();
            }
            // determine if the default button and the default description text should visable
            ppBtnDefaultFmt.Visible = !(ppCmbxFormat.SelectedValue == null || ppCmbxFormat.SelectedIndex == -1);
            ppLblFormatDefault.Visible = ppCbShwDefSettings.Checked && ppBtnDefaultFmt.Visible;
        }
    }
}