public string MayFrameData(List <MainFrameDataPO> list)
        {
            MainFrameDataPO mayPo = list.Find(l => l.TabPageName == StriveXMLConstants.TabMayPage);

            string mayFrameData
            // Standing Far Moves
                = StriveXMLConstants.StandingFarMoves + Environment.NewLine
                  + StriveXMLConstants.StandingFarPunch + ": " + mayPo.StandingFarPunch + Environment.NewLine
                  + StriveXMLConstants.StandingFarKick + ": " + mayPo.StandingFarKick + Environment.NewLine
                  + StriveXMLConstants.StandingFarSlash + ": " + mayPo.StandingFarSlash + Environment.NewLine
                  + StriveXMLConstants.StandingFarHeavySlash + ": " + mayPo.StandingFarHeavySlash + Environment.NewLine
                  + StriveXMLConstants.StandingFarDust + ": " + mayPo.StandingFarDust + Environment.NewLine
                  + StriveXMLConstants.StandingFarNotApplicable + ": " + mayPo.StandingFarNotApplicable + Environment.NewLine + Environment.NewLine
                  // Standing Close Moves
                  + StriveXMLConstants.StandingCloseMoves + Environment.NewLine
                  + StriveXMLConstants.StandingClosePunch + ": " + mayPo.StandingClosePunch + Environment.NewLine
                  + StriveXMLConstants.StandingCloseKick + ": " + mayPo.StandingCloseKick + Environment.NewLine
                  + StriveXMLConstants.StandingCloseSlash + ": " + mayPo.StandingCloseSlash + Environment.NewLine
                  + StriveXMLConstants.StandingCloseHeavySlash + ": " + mayPo.StandingCloseHeavySlash + Environment.NewLine
                  + StriveXMLConstants.StandingCloseDust + ": " + mayPo.StandingCloseDust + Environment.NewLine
                  + StriveXMLConstants.StandingCloseNotApplicable + ": " + mayPo.StandingCloseNotApplicable + Environment.NewLine + Environment.NewLine
                  // Crouching Moves
                  + StriveXMLConstants.CrouchingMoves + Environment.NewLine
                  + StriveXMLConstants.CrouchingPunch + ": " + mayPo.CrouchingPunch + Environment.NewLine
                  + StriveXMLConstants.CrouchingKick + ": " + mayPo.CrouchingKick + Environment.NewLine
                  + StriveXMLConstants.CrouchingSlash + ": " + mayPo.CrouchingSlash + Environment.NewLine
                  + StriveXMLConstants.CrouchingHeavySlash + ": " + mayPo.CrouchingHeavySlash + Environment.NewLine
                  + StriveXMLConstants.CrouchingDust + ": " + mayPo.CrouchingDust + Environment.NewLine
                  + StriveXMLConstants.CrouchingNotApplicable + ": " + mayPo.CrouchingNotApplicable + Environment.NewLine + Environment.NewLine
                  // Additional Notes
                  + StriveXMLConstants.AdditionalNotes + ": " + mayPo.AdditionalNotesTextBoxText + Environment.NewLine + Environment.NewLine;

            return(mayFrameData);
        }
        /// <summary>
        /// Exports Data to XML and PDF file.
        /// </summary>
        public void ExportData()
        {
            // 1. Build Export XML for import (leverage XMLFactory)
            MainFrameDataPO path = CompleteFrameDataList.FirstOrDefault(m => m.ImportExportLocationText != string.Empty);
            DateTime        date = DateTime.Now;

            string fileAppendDateFormat = $"{date.Year}{date.Day}{date.Month}{date.Hour}{date.Minute}{date.Second}";
            string codedPathXml         = @"\" + fileAppendDateFormat + "_FrameData.xml";
            string codedPathPdf         = @"\" + fileAppendDateFormat + "_FrameData.pdf";

            if (path != null && !string.IsNullOrEmpty(path.ImportExportLocationText))
            {
                XMLFactory.Factory.CreateXMLFromMainFrameDataPOList(CompleteFrameDataList, path.ImportExportLocationText + codedPathXml);
            }
            else
            {
                // Place into my documents folder if user hasn't set an actual folder
                string myDocuments = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                string myPath      = myDocuments + @"\" + fileAppendDateFormat + "_FrameData.xml";
                XMLFactory.Factory.CreateXMLFromMainFrameDataPOList(CompleteFrameDataList, myPath);
            }

            // 2. Build Export PDF for easy viewing (leverage PDFFactory)
            if (path != null && !string.IsNullOrEmpty(path.ImportExportLocationText))
            {
                PDFFactory.Factory.CreatePdfFromMainFrameDataPoList(
                    CompleteFrameDataList,
                    path.ImportExportLocationText + codedPathPdf);
            }
            else
            {
                // Place into my documents folder if user hasn't set an actual folder
                string myDocuments = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                string myPath      = myDocuments + @"\" + fileAppendDateFormat + "_FrameData.pdf";
                PDFFactory.Factory.CreatePdfFromMainFrameDataPoList(CompleteFrameDataList, myPath);
            }
        }
        /// <summary>
        /// Imports XML to UI.
        /// </summary>
        /// <param name="xmlImportList"></param>
        public void ImportData(List <MainFrameDataPO> xmlImportList)
        {
            if (xmlImportList == null || xmlImportList.Count == 0)
            {
                return;
            }

            // Tab pages
            for (int i = 0; i < MainFrameDataView.TabPages.Count; i++)
            {
                // Iterate over import list 1 to 1 with tabPages.
                MainFrameDataPO mfdPO = xmlImportList[i];

                // User controls inside tab page
                for (int j = 0; j < MainFrameDataView.TabPages[i].Controls.Count; j++)
                {
                    // User control controlCollection
                    for (int k = 0; k < MainFrameDataView.TabPages[i].Controls[j].Controls.Count; k++)
                    {
                        // Fill all combo boxes
                        if (MainFrameDataView.TabPages[i].Controls[j].Controls[k] is ComboBox)
                        {
                            ComboBox comboBoxControl = MainFrameDataView.TabPages[i].Controls[j].Controls[k] as ComboBox;

                            if (comboBoxControl != null)
                            {
                                switch (comboBoxControl.Name)
                                {
                                // Standing far
                                case "cbxStandingPunch":
                                    comboBoxControl.Text = mfdPO.StandingFarPunch;
                                    break;

                                case "cbxStandingKick":
                                    comboBoxControl.Text = mfdPO.StandingFarKick;
                                    break;

                                case "cbxStandingSlash":
                                    comboBoxControl.Text = mfdPO.StandingFarSlash;
                                    break;

                                case "cbxHeavySlash":
                                    comboBoxControl.Text = mfdPO.StandingFarHeavySlash;
                                    break;

                                case "cbxStandingDust":
                                    comboBoxControl.Text = mfdPO.StandingFarDust;
                                    break;

                                case "cbxStandingNA":
                                    comboBoxControl.Text = mfdPO.StandingFarNotApplicable;
                                    break;

                                // Standing close
                                case "cbxStandingClosePunch":
                                    comboBoxControl.Text = mfdPO.StandingClosePunch;
                                    break;

                                case "cbxStandingCloseKick":
                                    comboBoxControl.Text = mfdPO.StandingCloseKick;
                                    break;

                                case "cbxStandingCloseSlash":
                                    comboBoxControl.Text = mfdPO.StandingCloseSlash;
                                    break;

                                case "cbxStandingCloseHeavySlash":
                                    comboBoxControl.Text = mfdPO.StandingCloseHeavySlash;
                                    break;

                                case "cbxStandingCloseDust":
                                    comboBoxControl.Text = mfdPO.StandingCloseDust;
                                    break;

                                case "cbxStandingCloseNotApplicable":
                                    comboBoxControl.Text = mfdPO.StandingCloseNotApplicable;
                                    break;

                                // Crouching
                                case "cbxCrouchingPunch":
                                    comboBoxControl.Text = mfdPO.CrouchingPunch;
                                    break;

                                case "cbxCrouchKick":
                                    comboBoxControl.Text = mfdPO.CrouchingKick;
                                    break;

                                case "cbxCrouchSlash":
                                    comboBoxControl.Text = mfdPO.CrouchingSlash;
                                    break;

                                case "cbxCrouchHeavySlash":
                                    comboBoxControl.Text = mfdPO.CrouchingHeavySlash;
                                    break;

                                case "cbxCrouchingDust":
                                    comboBoxControl.Text = mfdPO.CrouchingDust;
                                    break;

                                case "cbxCrouchingNotApplicable":
                                    comboBoxControl.Text = mfdPO.CrouchingNotApplicable;
                                    break;
                                }
                            }
                        }

                        if (MainFrameDataView.TabPages[i].Controls[j].Controls[k] is RichTextBox)
                        {
                            RichTextBox richTextBoxControl = MainFrameDataView.TabPages[i].Controls[j].Controls[k] as RichTextBox;

                            if (richTextBoxControl != null)
                            {
                                if (richTextBoxControl.Name == "txtAdditionalNotes")
                                {
                                    richTextBoxControl.Text = mfdPO.AdditionalNotesTextBoxText;
                                }

                                // Ensure we do not trigger export text changed event. Once we import one value into export text box
                                // the application will automatically fill out the rest via event in the view.
                                if (richTextBoxControl.Name == "txtImportExportFileLocation" && string.IsNullOrEmpty(richTextBoxControl.Text))
                                {
                                    richTextBoxControl.Text = mfdPO.ImportExportLocationText;
                                }
                            }
                        }
                    }
                }
            }
        }