private static void SetRowBackgroundColor(object iRowID, object nvMatchType, bool bDeleteRowFlag)
        {
            if (iRowID == null) return;

            System.Windows.Forms.DataGridViewRow row = NAVForm.GetSheetDataGridView().Rows.Cast<System.Windows.Forms.DataGridViewRow>()
                .Where(x => !x.IsNewRow)
                .Where(x => ((DataRowView)x.DataBoundItem).Row.Field<int>(Constants.KEY_COLUMN).Equals(iRowID))
                .FirstOrDefault();

            if (GetResetPending(row)) return;

            switch (nvMatchType)
            {
                case Constants.MATCH_ASSOCIATE:
                    row.DefaultCellStyle.BackColor = (bDeleteRowFlag) ? Constants.COLOR_MATCH_ASSOCIATE_DELETE : Constants.COLOR_MATCH_ASSOCIATE;
                    break;

                case Constants.MATCH_PRINCIPLE:
                    row.DefaultCellStyle.BackColor = (bDeleteRowFlag) ? Constants.COLOR_MATCH_PRINCIPLE_DELETE : Constants.COLOR_MATCH_PRINCIPLE;
                    break;

                default:
                    row.DefaultCellStyle.BackColor = Constants.COLOR_DEFAULT;
                    break;
            }

        }
        private void InformPreferenceChanged()
        {
            switch (MessageBox.Show(string.Format(UserHelper.culture, Properties.Resources.NOTIFY_PREFERENCE_CHANGES, System.Environment.NewLine), Properties.Resources.CAPTION_RESTART_APPLICATION, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button3))
            {
            case DialogResult.Yes:

                if (NAVForm.GetSpreadsheetChanges())
                {
                    switch (MessageBox.Show(Properties.Resources.NOTIFY_SAVEWORKBOOKCHANGES_ON_EXIT, Properties.Resources.CAPTION_SAVE_WORKBOOK, MessageBoxButtons.YesNo, MessageBoxIcon.Warning))
                    {
                    case DialogResult.Yes:

                        NAVForm.SaveWorkbook();
                        break;

                    default: break;
                    }
                }

                System.Diagnostics.Process.Start(Application.ExecutablePath);
                Close();

                break;

            default:
                SetEnablePreferenceChange(false);
                break;
            }

            SetNotifyPreferenceChange(false);
        }
        internal static void AcceptDataGridViewChanges()
        {
            foreach (DataTable table in NAVForm.DataTableCollection)
            {
                table.AcceptChanges();
            }

            NAVForm.SetSheetCurrentTotal(value: string.Format(UserHelper.culture, Properties.Resources.NOTIFY_CURRENT_TOTAL, NAVForm.GetSheetDataGridView().RowCount - 1));
            NAVForm.SetSpreadsheetChanges(true);
            SetSheetDataGridViewFocus();
        }
        internal static void DeleteDuplicateRows(DataTable datatable)
        {
            if (NAVForm.GetSheetDataGridView().RowCount == 0 || datatable == null)
            {
                return;
            }

            datatable.AcceptChanges();

            object[] rows = SelectDuplicateRows();

            if (rows.Any())
            {
                DeleteSelectedRows();
            }

            void DeleteSelectedRows()
            {
                for (int i = rows.Length - 1; i > -1; i--)
                {
                    int j = 0;

                    while (j < datatable.Rows.Count)
                    {
                        DataRow row = datatable.Rows[j];

                        if (row.HasVersion(DataRowVersion.Current))
                        {
                            if (row[Constants.COLUMN_PARENT_ID].Equals(rows[i]))
                            {
                                row.Delete();
                            }
                        }

                        j++;
                    }
                }

                datatable.AcceptChanges();
            }

            object[] SelectDuplicateRows()
            {
                datatable.AcceptChanges();

                return(datatable.Rows.Cast <DataRow>()
                       .Where(x => x[Constants.COLUMN_DELETE_FLAG].Equals(1) || x[Constants.COLUMN_COMPARISON].Equals(100))
                       .Select(x => x[Constants.COLUMN_PARENT_ID])
                       .Distinct()
                       .ToArray());
            }
        }
        public static void ResumeDataGridViews()
        {
            System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default;

            ResumeDataGridViewDrawing();

            void ResumeDataGridViewDrawing()
            {
                NAVForm.ResumeSheetDataGridView();
                ExplorerForm.ResumeResultDataGridView();
            }

        }
        public static void SuspendDataGridViews()
        {
            WorkTables.SetSheetDataGridViewFocus();

            System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor;

            SuspendDataGridViewDrawing();

            void SuspendDataGridViewDrawing()
            {
                NAVForm.SuspendSheetDataGridView();
                ExplorerForm.SuspendResultDataGridView();
            }

        }
        internal static DataTable BuildParentTable()
        {
            using (DataTable table = new DataTable())
            {
                DataColumn column = new DataColumn
                {
                    DataType   = System.Type.GetType("System.Int32"),
                    ColumnName = Constants.COLUMN_ROW_ID,
                    ReadOnly   = true,
                    Unique     = true
                };

                table.Columns.Add(column);

                column = new DataColumn
                {
                    DataType   = System.Type.GetType("System.String"),
                    ColumnName = Constants.COLUMN_DATA
                };

                table.Columns.Add(column);

                DataColumn[] PrimaryKeyColumns = new DataColumn[1];
                PrimaryKeyColumns[0] = table.Columns[Constants.KEY_COLUMN];
                table.PrimaryKey     = PrimaryKeyColumns;

                if (NAVForm.GetSheetDataGridView() != null)
                {
                    PopulateParentTable();
                }

                return(table);

                void PopulateParentTable()
                {
                    int SheetDataGridViewColumnCount = NAVForm.GetSheetDataGridView().Columns.GetColumnCount(System.Windows.Forms.DataGridViewElementStates.Visible);

                    if (SheetDataGridViewColumnCount > 0)
                    {
                        foreach (System.Windows.Forms.DataGridViewRow row in NAVForm.GetSheetDataGridView().Rows)
                        {
                            if (row.IsNewRow)
                            {
                                break;
                            }

                            if (row.Cells[Constants.KEY_COLUMN].Value != null)
                            {
                                System.Text.StringBuilder ConcatenateRow = new System.Text.StringBuilder();

                                foreach (System.Windows.Forms.DataGridViewCell cell in row.Cells)
                                {
                                    if ((cell.OwningColumn.Visible == true) && (cell.OwningColumn.Name != Constants.KEY_COLUMN))
                                    {
                                        ConcatenateRow.Append(cell.Value + " ");
                                    }
                                }

                                string ConcatenateRowToString = ConcatenateRow.ToString().TrimEnd((char)32);

                                while (ConcatenateRowToString.Contains("  "))
                                {
                                    ConcatenateRowToString = ConcatenateRowToString.Replace("  ", " ");
                                }

                                DataRow tableRow = table.NewRow();
                                tableRow[Constants.COLUMN_ROW_ID] = row.Cells[Constants.KEY_COLUMN].Value;
                                tableRow[Constants.COLUMN_DATA]   = ConcatenateRowToString.TrimEnd();
                                table.Rows.Add(tableRow);
                            }
                        }

                        table.AcceptChanges();
                    }
                }
            }
        }
 internal static void SetSheetDataGridViewFocus()
 {
     NAVForm.GetSheetDataGridView().CurrentCell = NAVForm.GetSheetDataGridView().FirstDisplayedCell;
     NAVForm.GetSheetDataGridView().Focus();
 }
        private void InitializePanels()
        {
            BackColor = Constants.COLOR_DEFAULT_BACKCOLOR;

            SetNotifyPreferenceChange(false);
            SetEnablePreferenceChange(true);

            InitializeLeftPanelForm();
            InitializeRightPanelForm();

            initializeCaptions();
            initializeToolTips();

            LogHelper.TraceInitialisationComplete();

            void NAVFormShownEventHandler(object sender, EventArgs e)
            {
                UpdateHelper.CheckForUpdates();
            }

            void initializeCaptions()
            {
                Text                    = ConnectionHelper.ApplicationName();
                TABExplorer.Text        = Properties.Resources.CAPTION_TAB_EXPLORER;
                TABPreferences.Text     = Properties.Resources.CAPTION_TAB_PREFERENCES;
                TABAbbreviations.Text   = Properties.Resources.CAPTION_TAB_ABBREVIATIONS;
                LABELExplorer.Text      = Properties.Resources.CAPTION_SIMILARITY;
                LABELPreferences.Text   = Properties.Resources.CAPTION_PREFERENCES;
                LABELAbbreviations.Text = Properties.Resources.CAPTION_ABBREVIATIONS;
            }

            void initializeToolTips()
            {
                TABToolTips.SetToolTip(PanelSliderPictureBox, Properties.Resources.TOOLTIP_PANELSLIDERPICTUREBOX);
                TABToolTips.SetToolTip(NewButton, Properties.Resources.TOOLTIP_NEWBUTTON);
                TABToolTips.SetToolTip(DeleteButton, Properties.Resources.TOOLTIP_DELETEBUTTON);

                nvWord.ToolTipText                    = Properties.Resources.TOOLTIP_WORDTEXT;
                nvAbbreviation.ToolTipText            = Properties.Resources.TOOLTIP_ABBREVIATIONTEXT;
                nvAbbreviationDescription.ToolTipText = Properties.Resources.TOOLTIP_ABBREVIATIONDESCRIPTIONTEXT;
                bAlwaysUse.ToolTipText                = Properties.Resources.TOOLTIP_ALWAYSUSETEXT;
            }

            void InitializeLeftPanelForm()
            {
                NAVFormSplitContainer.BackColor       = Constants.COLOR_DEFAULT_BACKCOLOR;
                NAVFormSplitContainer.Panel2Collapsed = true;

                NAVForm.Shown += new EventHandler(NAVFormShownEventHandler);

                NAVForm.TopLevel        = false;
                NAVForm.FormBorderStyle = FormBorderStyle.None;
                NAVForm.Parent          = NAVFormSplitContainer.Panel1;
                NAVForm.Dock            = DockStyle.Fill;

                NAVForm.Show();
            }

            void InitializeRightPanelForm()
            {
                Cursor = Cursors.WaitCursor;

                InitializeAbbreviations();
                InitializePreferences();
                InitializeExplorer();

                Cursor = Cursors.Default;

                void InitializeAbbreviations()
                {
                    AbbreviationsDataGridView.ReadOnly                 = !EditAbbreviations;
                    AbbreviationsDataGridView.AllowUserToAddRows       = false;
                    AbbreviationsDataGridView.AllowUserToDeleteRows    = false;
                    AbbreviationsDataGridView.AllowUserToOrderColumns  = true;
                    AbbreviationsDataGridView.AllowUserToResizeColumns = false;
                    AbbreviationsDataGridView.AllowUserToResizeRows    = false;

                    try
                    {
                        AbbreviationTypeComboBox.BackColor             = Constants.COLOR_DEFAULT_BACKCOLOR;
                        AbbreviationTypeComboBox.DataSource            = DataAccess.GetAbbreviationTypes();
                        AbbreviationTypeComboBox.DisplayMember         = Constants.COLUMN_ABBREVIATION_TYPE;
                        AbbreviationTypeComboBox.SelectedIndexChanged += (object sender, EventArgs e) => GetAbbreviationDataGridView();
                    }
                    catch (System.Data.SqlClient.SqlException ex)
                    {
                        MessageBox.Show(Properties.Resources.NOTIFY_ABBREVIATION_FAIL, Properties.Resources.CAPTION_ABBREVIATIONS, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        if (log != null)
                        {
                            log.Error(Properties.Resources.NOTIFY_ABBREVIATION_FAIL, ex);
                        }
                    }

                    NAVPanelFormTabControl.SelectedIndexChanged += TABPreferencesLeave;

                    AbbreviationsDataGridView.CellValueChanged += AbbreviationsCellValueChanged;
                    AbbreviationsDataGridView.RowValidating    += AbbreviationsRowValidating;
                    AbbreviationsDataGridView.MouseDown        += AbbreviationsDataGridViewMouseDownEvent;
                    AbbreviationsDataGridView.MouseUp          += AbbreviationsMouseUp;

                    AbbreviationMenuItemDelete.Enabled = DeleteAbbreviations;
                    AbbreviationMenuItemNew.Enabled    = AddNewAbbreviations;

                    DeleteButton.Enabled = DeleteAbbreviations;
                    NewButton.Enabled    = AddNewAbbreviations;

                    using (ClassLibraryFramework.DrawingInteropServices.PauseDrawing(AbbreviationsDataGridView))
                    {
                        if (HideAbbreviations)
                        {
                            if (NAVPanelFormTabControl.TabPages.Contains(TABAbbreviations))
                            {
                                NAVPanelFormTabControl.TabPages.Remove(TABAbbreviations);
                            }
                        }
                        else
                        {
                            GetAbbreviationDataGridView();
                        }

                        if (HideExplorer)
                        {
                            if (NAVPanelFormTabControl.TabPages.Contains(TABExplorer))
                            {
                                NAVPanelFormTabControl.TabPages.Remove(TABExplorer);
                            }
                        }
                    }
                }

                void InitializeExplorer()
                {
                    ExplorerForm explorerForm = new ExplorerForm()
                    {
                        TopLevel        = false,
                        FormBorderStyle = FormBorderStyle.None,
                        Dock            = DockStyle.Fill
                    };

                    ExplorerFormPanel.BackColor = Constants.COLOR_DEFAULT_WINDOW;

                    ExplorerFormPanel.Controls.Add(explorerForm);
                    explorerForm.Show();
                }

                void InitializePreferences()
                {
                    PreferencesForm preferencesForm = new PreferencesForm
                    {
                        TopLevel        = false,
                        FormBorderStyle = FormBorderStyle.None,
                        Dock            = DockStyle.Fill
                    };

                    TABPreferences.BackColor = Constants.COLOR_DEFAULT_WINDOW;

                    PreferenceFormPanel.Controls.Add(preferencesForm);
                    preferencesForm.Show();
                }
            }
        }