private void MenuItem_Activate(object sender, EventArgs e)
        {
            try {
                //
                // Error List Context Menu
                //
                if (sender == this.menuButtonItemScroll)
                {
                    // Can only zoom to one item
                    if (this.listViewErrorList.SelectedItems.Count != 1)
                    {
                        return;
                    }

                    // Get EsriTable containing the error
                    ListViewItemError item  = (ListViewItemError)this.listViewErrorList.SelectedItems[0];
                    EsriTable         table = null;
                    if (item.Error is ErrorTable)
                    {
                        ErrorTable errorTable = (ErrorTable)item.Error;
                        table = errorTable.Table;
                    }
                    else if (item.Error is ErrorTableRow)
                    {
                        ErrorTableRow errorTableRow = (ErrorTableRow)item.Error;
                        EsriTableRow  esriTableRow  = (EsriTableRow)errorTableRow.TableRow;
                        table = (EsriTable)esriTableRow.Table;
                    }
                    else if (item.Error is ErrorObject)
                    {
                        ErrorObject errorObject = (ErrorObject)item.Error;
                        table = errorObject.Table;
                    }
                    if (table == null)
                    {
                        return;
                    }

                    // Get Containing Model
                    EsriModel model = (EsriModel)table.Container;

                    // Scroll to Table
                    model.ScrollToElement(table);

                    // Flash Table
                    table.Flash();
                }
                else if (sender == this.menuButtonItemSelect)
                {
                    // Can only zoom to one item
                    if (this.listViewErrorList.SelectedItems.Count == 0)
                    {
                        return;
                    }

                    foreach (ListViewItemError item in this.listViewErrorList.SelectedItems)
                    {
                        EsriModel model = null;
                        if (item.Error is ErrorTable)
                        {
                            ErrorTable errorTable = (ErrorTable)item.Error;
                            EsriTable  table      = errorTable.Table;
                            model = (EsriModel)table.Container;
                        }
                        else if (item.Error is ErrorTableRow)
                        {
                            ErrorTableRow errorTableRow = (ErrorTableRow)item.Error;
                            EsriTableRow  esriTableRow  = (EsriTableRow)errorTableRow.TableRow;
                            EsriTable     table         = (EsriTable)esriTableRow.Table;
                            model = (EsriModel)table.Container;
                        }
                        else if (item.Error is ErrorObject)
                        {
                            ErrorObject errorObject = (ErrorObject)item.Error;
                            EsriTable   table       = errorObject.Table;
                            model = (EsriModel)table.Container;
                        }
                        if (model == null)
                        {
                            continue;
                        }

                        // Clear Model Selection
                        model.SelectElements(false);
                    }
                    //
                    foreach (ListViewItemError item in this.listViewErrorList.SelectedItems)
                    {
                        // Get Table
                        EsriTable table = null;
                        if (item.Error is ErrorTable)
                        {
                            ErrorTable errorTable = (ErrorTable)item.Error;
                            table = errorTable.Table;
                        }
                        else if (item.Error is ErrorTableRow)
                        {
                            ErrorTableRow errorTableRow = (ErrorTableRow)item.Error;
                            EsriTableRow  esriTableRow  = (EsriTableRow)errorTableRow.TableRow;
                            table = (EsriTable)esriTableRow.Table;
                        }
                        else if (item.Error is ErrorObject)
                        {
                            ErrorObject errorObject = (ErrorObject)item.Error;
                            table = errorObject.Table;
                        }
                        if (table == null)
                        {
                            continue;
                        }

                        // Flash Table
                        table.Selected = true;
                    }
                }
                else if (sender == this.menuButtonItemFlashError)
                {
                    // Can only zoom to one item
                    if (this.listViewErrorList.SelectedItems.Count == 0)
                    {
                        return;
                    }

                    //
                    foreach (ListViewItemError item in this.listViewErrorList.SelectedItems)
                    {
                        // Get Table
                        EsriTable table = null;
                        if (item.Error is ErrorTable)
                        {
                            ErrorTable errorTable = (ErrorTable)item.Error;
                            table = errorTable.Table;
                        }
                        else if (item.Error is ErrorTableRow)
                        {
                            ErrorTableRow errorTableRow = (ErrorTableRow)item.Error;
                            EsriTableRow  esriTableRow  = (EsriTableRow)errorTableRow.TableRow;
                            table = (EsriTable)esriTableRow.Table;
                        }
                        else if (item.Error is ErrorObject)
                        {
                            ErrorObject errorObject = (ErrorObject)item.Error;
                            table = errorObject.Table;
                        }
                        if (table == null)
                        {
                            continue;
                        }

                        // Flash Table
                        table.Flash();
                    }
                }
                else if (sender == this.menuButtonItemClearError)
                {
                    // Remove Selected Items
                    foreach (ListViewItemError item in this.listViewErrorList.SelectedItems)
                    {
                        if (this.m_errors.Contains(item.Error))
                        {
                            this.m_errors.Remove(item.Error);
                        }
                    }

                    // Refresh Error List
                    this.RefreshErrorList();
                }
                else if (sender == menuButtonItemClearAllErrors)
                {
                    // Remove All Errors
                    this.m_errors.Clear();

                    // Refresh Error List
                    this.RefreshErrorList();
                }
                //
                // Validator Dropdown Menu
                //
                else if (sender == this.menuButtonItemPGdb)
                {
                    WorkspaceValidator.Default.Validator = new PersonalGeodatabaseValidator();
                }
                else if (sender == this.menuButtonItemFGdb)
                {
                    WorkspaceValidator.Default.Validator = new FileGeodatabaseValidator();
                }
                else if (sender == this.menuButtonItemSelectGeodatabase)
                {
                    // Create GxObjectFilter for GxDialog
                    IGxObjectFilter gxObjectFilter = new GxFilterWorkspacesClass();

                    // Create GxDialog
                    IGxDialog gxDialog = new GxDialogClass();
                    gxDialog.AllowMultiSelect = false;
                    gxDialog.ButtonCaption    = Resources.TEXT_SELECT;
                    gxDialog.ObjectFilter     = gxObjectFilter;
                    gxDialog.RememberLocation = true;
                    gxDialog.Title            = Resources.TEXT_SELECT_EXISTING_GEODATABASE;

                    // Declare Enumerator to hold selected objects
                    IEnumGxObject enumGxObject = null;

                    // Open Dialog
                    if (!gxDialog.DoModalOpen(0, out enumGxObject))
                    {
                        return;
                    }
                    if (enumGxObject == null)
                    {
                        return;
                    }

                    // Get Selected Object (if any)
                    IGxObject gxObject = enumGxObject.Next();
                    if (gxObject == null)
                    {
                        return;
                    }
                    if (!gxObject.IsValid)
                    {
                        return;
                    }

                    // Get GxDatabase
                    if (!(gxObject is IGxDatabase))
                    {
                        return;
                    }
                    IGxDatabase gxDatabase = (IGxDatabase)gxObject;

                    // Get Workspace
                    IWorkspace workspace = gxDatabase.Workspace;
                    if (workspace == null)
                    {
                        return;
                    }

                    // Get Workspace Factory
                    IWorkspaceFactory workspaceFactory = workspace.WorkspaceFactory;
                    if (workspaceFactory == null)
                    {
                        return;
                    }

                    // Get Workspace Factory ID
                    IUID   uid  = workspaceFactory.GetClassID();
                    string guid = uid.Value.ToString().ToUpper();

                    switch (guid)
                    {
                    case EsriRegistry.GEODATABASE_PERSONAL:
                        WorkspaceValidator.Default.Validator = new PersonalGeodatabaseValidator(workspace);
                        break;

                    case EsriRegistry.GEODATABASE_FILE:
                        WorkspaceValidator.Default.Validator = new FileGeodatabaseValidator(workspace);
                        break;

                    case EsriRegistry.GEODATABASE_SDE:
                        WorkspaceValidator.Default.Validator = new SdeValidator(workspace);
                        break;

                    default:
                        break;
                    }
                }
                else if ((sender is MenuButtonItem) && (((MenuButtonItem)sender).Parent == this.menuButtonItemSdeConnection))
                {
                    MenuButtonItem item = (MenuButtonItem)sender;
                    if (item.Tag == null)
                    {
                        return;
                    }
                    WorkspaceValidator.Default.Validator = new SdeValidator(item.Tag.ToString());
                }
            }
            catch (Exception ex) {
                ExceptionDialog.HandleException(ex);
            }
        }
        private void RefreshErrorList()
        {
            // Clear Rows and Columns
            this.listViewErrorList.Clear();

            // Clear Groups
            this.listViewErrorList.Groups.Clear();

            // Begin Update
            this.listViewErrorList.BeginUpdate();

            // Create Groups
            ListViewGroup listViewGroupError   = null;
            ListViewGroup listViewGroupWarning = null;

            // Add Groups
            if (this.buttonItemErrors.Checked)
            {
                listViewGroupError = new ListViewGroup(Resources.TEXT_ERRORS, HorizontalAlignment.Left);
                this.listViewErrorList.Groups.Add(listViewGroupError);
            }
            if (this.buttonItemWarnings.Checked)
            {
                listViewGroupWarning = new ListViewGroup(Resources.TEXT_WARNINGS, HorizontalAlignment.Left);
                this.listViewErrorList.Groups.Add(listViewGroupWarning);
            }

            // Counters
            int errors   = 0;
            int warnings = 0;
            int counter  = 0;

            // Add Columns
            ColumnHeader columnDescription = this.listViewErrorList.Columns.Add(Resources.TEXT_DESCRIPTION);

            // Get DiagramEnvironment Singleton
            DiagrammerEnvironment diagrammerEnvironment = DiagrammerEnvironment.Default;

            // Add Errors
            foreach (Error error in this.m_errors)
            {
                // Exit if Error Type is not selected. But increment counter.
                switch (error.ErrorType)
                {
                case ErrorType.Error:
                    errors++;
                    if (!this.buttonItemErrors.Checked)
                    {
                        continue;
                    }
                    break;

                case ErrorType.Warning:
                    warnings++;
                    if (!this.buttonItemWarnings.Checked)
                    {
                        continue;
                    }
                    break;

                default:
                    continue;
                }

                // Increment Counter
                counter++;

                // Display Error Loading Message
                string message = string.Format("Loading Error {0} of {1}", counter.ToString(), this.m_errors.Count.ToString());
                diagrammerEnvironment.OnProgressChanged(new ProgressEventArgs(message));

                // Create  New ListViewItem
                ListViewItemError listViewItemError = new ListViewItemError();

                // Store Error
                listViewItemError.Error = error;

                // Set Item Text
                listViewItemError.Text = error.Description;

                // Set Item Tooltip
                listViewItemError.ToolTipText = error.Description;

                // Set ListViewItem Group
                switch (error.ErrorType)
                {
                case ErrorType.Error:
                    listViewItemError.Group    = listViewGroupError;
                    listViewItemError.ImageKey = ErrorListDiagram.ERRORS_ITEM;
                    break;

                case ErrorType.Warning:
                    listViewItemError.Group    = listViewGroupWarning;
                    listViewItemError.ImageKey = ErrorListDiagram.WARNINGS_ITEM;
                    break;
                }

                // Add to ListView
                this.listViewErrorList.Items.Add(listViewItemError);
            }

            // Update Error Count in Toolbar Button
            this.buttonItemErrors.Text   = string.Format(Resources.TEXT_ERRORS_, errors.ToString());
            this.buttonItemWarnings.Text = string.Format(Resources.TEXT_WARNINGS_, warnings.ToString());

            // Adjust column widths to size of longest entry
            foreach (ColumnHeader column in this.listViewErrorList.Columns)
            {
                column.Width = -2;
            }

            // End Update
            this.listViewErrorList.EndUpdate();

            // Clear Messages
            diagrammerEnvironment.OnProgressChanged(new ProgressEventArgs(string.Empty));
        }
        private void RefreshErrorList() {
            // Clear Rows and Columns
            this.listViewErrorList.Clear();

            // Clear Groups
            this.listViewErrorList.Groups.Clear();

            // Begin Update
            this.listViewErrorList.BeginUpdate();

            // Create Groups
            ListViewGroup listViewGroupError = null;
            ListViewGroup listViewGroupWarning = null;

            // Add Groups
            if (this.buttonItemErrors.Checked) {
                listViewGroupError = new ListViewGroup(Resources.TEXT_ERRORS, HorizontalAlignment.Left);
                this.listViewErrorList.Groups.Add(listViewGroupError);
            }
            if (this.buttonItemWarnings.Checked) {
                listViewGroupWarning = new ListViewGroup(Resources.TEXT_WARNINGS, HorizontalAlignment.Left);
                this.listViewErrorList.Groups.Add(listViewGroupWarning);
            }

            // Counters
            int errors = 0;
            int warnings = 0;
            int counter = 0;

            // Add Columns
            ColumnHeader columnDescription = this.listViewErrorList.Columns.Add(Resources.TEXT_DESCRIPTION);

            // Get DiagramEnvironment Singleton
            DiagrammerEnvironment diagrammerEnvironment = DiagrammerEnvironment.Default;

            // Add Errors
            foreach (Error error in this.m_errors) {
                // Exit if Error Type is not selected. But increment counter.
                switch (error.ErrorType) {
                    case ErrorType.Error:
                        errors++;
                        if (!this.buttonItemErrors.Checked) { continue; }
                        break;
                    case ErrorType.Warning:
                        warnings++;
                        if (!this.buttonItemWarnings.Checked) { continue; }
                        break;
                    default:
                        continue;
                }

                // Increment Counter
                counter++;

                // Display Error Loading Message
                string message = string.Format("Loading Error {0} of {1}", counter.ToString(), this.m_errors.Count.ToString());
                diagrammerEnvironment.OnProgressChanged(new ProgressEventArgs(message));

                // Create  New ListViewItem
                ListViewItemError listViewItemError = new ListViewItemError();

                // Store Error
                listViewItemError.Error = error;

                // Set Item Text
                listViewItemError.Text = error.Description;

                // Set Item Tooltip
                listViewItemError.ToolTipText = error.Description;

                // Set ListViewItem Group
                switch (error.ErrorType) {
                    case ErrorType.Error:
                        listViewItemError.Group = listViewGroupError;
                        listViewItemError.ImageKey = ErrorListDiagram.ERRORS_ITEM;
                        break;
                    case ErrorType.Warning:
                        listViewItemError.Group = listViewGroupWarning;
                        listViewItemError.ImageKey = ErrorListDiagram.WARNINGS_ITEM;
                        break;
                }

                // Add to ListView
                this.listViewErrorList.Items.Add(listViewItemError);
            }

            // Update Error Count in Toolbar Button
            this.buttonItemErrors.Text = string.Format(Resources.TEXT_ERRORS_, errors.ToString());
            this.buttonItemWarnings.Text = string.Format(Resources.TEXT_WARNINGS_, warnings.ToString());

            // Adjust column widths to size of longest entry
            foreach (ColumnHeader column in this.listViewErrorList.Columns) {
                column.Width = -2;
            }

            // End Update
            this.listViewErrorList.EndUpdate();

            // Clear Messages
            diagrammerEnvironment.OnProgressChanged(new ProgressEventArgs(string.Empty));
        }