partial void BuildBtn(NSObject sender)
        {
            // Clear output fields
            errorOutputBox.StringValue = resultTxtBox.StringValue = "";

            // Get data
            fnStringArr = new List <string>(new string[] {
                jobNumTxtBox.StringValue,
                counterTxtBox.StringValue,
                totalPDFsTxtBox.StringValue,
                custCodeTxtBox.StringValue,
                campNameTxtBox.StringValue,
                origFNTxtBox.StringValue,
                widthTxtBox.StringValue,
                heightTxtBox.StringValue,
                stockTxtBox.StringValue,
                quantTxtBox.StringValue,
                revVerTxtBox.StringValue,
                finishingTxtBox.StringValue,
                colourTxtBox.StringValue,
                commentTxtBox.StringValue,
                logoWanted
            });

            string filePath = showFilePathTxtBox.StringValue;

            /**Error Check**/
            StringBuilder sb = new StringBuilder();

            // Counter/Total PDFs have special check when reject
            if (rejectCheck.State == NSCellStateValue.On)
            {
                sb.Append(ErrorCheck.CheckNumerical(fnStringArr[1], 1, true) +
                          ErrorCheck.CheckNumerical(fnStringArr[2], 2, true));
            }
            else
            {
                sb.Append(ErrorCheck.CheckPages(fnStringArr[1], fnStringArr[2]));
            }

            sb.Append(ErrorCheck.CheckNumerical(fnStringArr[0], 0, false) +
                      ErrorCheck.CheckEmpty(fnStringArr[3], 3) +
                      ErrorCheck.CheckEmpty(fnStringArr[4], 4) +
                      ErrorCheck.CheckEmpty(fnStringArr[5], 5) +
                      ErrorCheck.CheckFloat(fnStringArr[6], 6) +
                      ErrorCheck.CheckFloat(fnStringArr[7], 7) +
                      ErrorCheck.CheckEmpty(fnStringArr[8], 8) +
                      ErrorCheck.CheckNumerical(fnStringArr[9], 9, true) +
                      ErrorCheck.CheckNumerical(fnStringArr[10], 10, true) +
                      ErrorCheck.CheckEmpty(fnStringArr[11], 11) +
                      ErrorCheck.CheckEmpty(fnStringArr[12], 12) +
                      ErrorCheck.CheckEmpty(fnStringArr[13], 13) +
                      ErrorCheck.CheckEmpty(filePath, 14));

            // Invalid Char Check
            foreach (var item in fnStringArr)
            {
                sb.Append(ErrorCheck.CheckInvalidChar(item));
            }

            // Errors found are displayed and build stopped
            if (sb.Length != 0)
            {
                DisplayErrors(sb);
                return;
            }

            /**Renaming/Moving**/
            string folderNameString = string.Format("{0}_{1}", fnStringArr[0], fnStringArr[4]);
            string fileNameString   = string.Format("{0}_{1}", fnStringArr[0], fnStringArr[5]);
            string newFilePath;

            //If Reject
            if (rejectCheck.State == NSCellStateValue.On)
            {
                newFilePath = filePath + "/Reject";
            }
            else
            {
                newFilePath = filePath + "/" + folderNameString;
            }

            // Folder Creation
            try
            {
                if (!Directory.Exists(newFilePath))
                {
                    Directory.CreateDirectory(newFilePath);
                }
            }
            catch (Exception)
            {
                sb.Append("- Unable to create folder\n" + newFilePath);
                DisplayErrors(sb);
                return;
            }

            // Rename/Move
            sb.Append(MoveAndRenameFile(filePath, newFilePath, fileNameString));

            if (sb.Length != 0)
            {
                DisplayErrors(sb);
                // return;
            }

            /**XML Creation**/
            bool saveOK = XMLClass.SaveXMLToFile(XMLClass.CreateXML(fnStringArr), newFilePath + "/" + fileNameString + ".xml");

            if (!saveOK)
            {
                sb.Append("- File Path is not valid\n");
                DisplayErrors(sb);
                return;
            }

            /**Add to Previous Filename table**/
            FNDataSource.Filenames.Add(new Filename(FNDataSource.FileID, fileNameString));
            FNDataSource.FileID++;

            /**Display and Notify user**/
            resultTxtBox.StringValue      = fileNameString;
            notificationLabel.StringValue = "Success!";
            resultTxtBox.SelectText(sender);

            // /**Page Counter increment**/
            int count = int.Parse(fnStringArr[1]), total = int.Parse(fnStringArr[2]);

            if (count < total)
            {
                count++;
                counterTxtBox.StringValue = count.ToString();
            }

            if (fnStringArr[0].Equals("000000"))
            {
                jobNumTxtBox.StringValue = "000000";
            }
        }
        partial void ImportXML(NSObject sender)
        {
            // User selects XML File
            using (var dlg = NSOpenPanel.OpenPanel)
            {
                dlg.CanChooseFiles          = true;
                dlg.CanChooseDirectories    = false;
                dlg.AllowsMultipleSelection = false;
                dlg.AllowedFileTypes        = new string[]
                {
                    AllowedFiletypes.xml.ToString()
                };

                if (dlg.RunModal() == 1)
                {
                    // Check filename string array exists
                    if (fnStringArr != null)
                    {
                        fnStringArr.Clear();
                    }
                    else
                    {
                        fnStringArr = new List <string>();
                    }

                    // Import XML
                    using (NSAlert alart = new NSAlert())
                    {
                        alart.MessageText = "Import XML File";
                        try
                        {
                            List <string> importedXMLData = XMLClass.ImportXML(dlg.Url.Path);
                            fnStringArr.AddRange(importedXMLData);

                            // Remove JobName (Unneeded)
                            fnStringArr.RemoveAt(4);

                            for (int i = 0; i < fnStringArr.Count; i++)
                            {
                                //Reject file and Total PDFs
                                if (rejectCheck.State == NSCellStateValue.On && i == 2)
                                {
                                    continue;
                                }
                                if (rejectCheck.State == NSCellStateValue.On && i == 10)
                                {
                                    fnStringArr[i] = (int.Parse(fnStringArr[i]) + 1).ToString();
                                }

                                allTextFields[i].StringValue = fnStringArr[i];
                            }
                            alart.InformativeText = "Successful import!";
                        }
                        catch (Exception)
                        {
                            alart.InformativeText = "The import failed, please ensure your XML document is correct";
                        }
                        alart.RunModal();
                    }
                }
            }
        }