/// <summary> Executes the "active" view sheet demo operation. </summary>
        ///
        /// <param name="sheetName"> Name of the ViewSheet to set as the active sheet. </param>
        ///
        /// <returns> true if it succeeds, false if it fails. </returns>
        private bool RunActiveViewSheetDemo(string sheetName)
        {
            // We use 'sheetIndex" later on to set the *active* sheet.
            var sheetIndex = ViewSheets.GetViewSheet(sheetName);

            if (sheetIndex == -1 && !this.ShowMessage($"Could not find sheet {sheetName}.", LocalizationStrings.Title, true))
            {
                return(false);
            }

            // If ViewSheets are enabled, this should not fail!
            // Get the current active sheet
            var currentSheetIndex = ViewSheets.GetActiveViewSheet();

            // Get the name of the *active* sheet
            var currentSheetName = ViewSheets.GetViewSheetName(currentSheetIndex);

            this.ShowMessage($"{currentSheetName} at sheet index {currentSheetIndex} is the current active sheet.", LocalizationStrings.Title);

            // Now set the requested sheet to be the *active* sheet.
            if (ViewSheets.SetActiveViewSheet(sheetIndex))
            {
                this.ShowMessage($"{sheetName} at sheet index {sheetIndex} is the new active sheet.", LocalizationStrings.Title);
            }

            return(true);
        }
        /// <summary> Shows the VisibleLevel data in the active ViewSheet. </summary>
        private void ShowLevels()
        {
            var sheetIndex = ViewSheets.GetActiveViewSheet();
            var name       = ViewSheets.GetViewSheetName(sheetIndex);
            var data       = new ViewSheets.ViewSheetData();

            if (ViewSheets.GetViewSheetData(sheetIndex, ref data))
            {
                var sb = new StringBuilder(name);
                foreach (var level in data.VisibleLevels)
                {
                    sb.AppendFormat("\nLevel {0}", level);
                }

                MessageBox.Show(sb.ToString(),
                                LocalizationStrings.Title,
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show(LocalizationStrings.FailedToGetSheetData,
                                LocalizationStrings.Title,
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
            }
        }
        /// <summary> Executes the delete view sheet demo operation. </summary>
        ///
        /// <param name="sheetIndex"> The sheetIndex of the ViewSheet to delete. </param>
        ///
        /// <returns> true if it succeeds, false if it fails. </returns>
        private bool RunDeleteViewSheetDemo(int sheetIndex)
        {
            var sheetName = ViewSheets.GetViewSheetName(sheetIndex);

            if (string.IsNullOrEmpty(sheetName) && !this.ShowMessage($"Could not find a sheet at sheet index {sheetIndex}.", LocalizationStrings.Title, true))
            {
                return(false);
            }

            this.ShowMessage($"We'll now delete {sheetName} at sheet index {sheetIndex}.", LocalizationStrings.Title);
            return(ViewSheets.DeleteViewSheet(sheetIndex));
        }
        /// <summary> Executes the create view sheet demo operation. </summary>
        ///
        /// <param name="sheetName"> Name of the ViewSheet to create. </param>
        ///
        /// <returns> true if it succeeds, false if it fails. </returns>
        private bool RunCreateViewSheetDemo(string sheetName)
        {
            this.ShowMessage(LocalizationStrings.CreateViewSheets, LocalizationStrings.Title);

            // Now we'll create some new ViewSheets...
            // First a ViewSheet with a system generated name.
            // If ViewSheets are enabled, this really shouldn't fail.
            if (ViewSheets.CreateViewSheet())
            {
                // Now a ViewSheet with a name of our choosing.
                // If we specify an invalid name (e.g. one that's already used) this could return false.
                var result = ViewSheets.CreateViewSheet(sheetName);
                if (!result && !this.ShowMessage(LocalizationStrings.FailedCreateViewSheet, LocalizationStrings.Title, true))
                {
                    return(false);
                }

                // Now we'll determine the sheetIndex of the "named" ViewSheet in the sheet list.
                var sheetIndex = ViewSheets.GetViewSheet(sheetName);
                if (sheetIndex == -1 && !this.ShowMessage("Retrieving a sheet named '" + sheetName + "' failed!", LocalizationStrings.Title, true))
                {
                    return(false);
                }

                // Now we'll create another sheet with a system generated name and then rename it.
                // This will demonstrate the RenameViewSheet method.
                if (ViewSheets.CreateViewSheet())
                {
                    // New sheets are added to the end of the (zero-based) list, so we can determine it's sheetIndex this way.
                    sheetIndex = ViewSheets.GetSheetCount() - 1;
                    var oldName = ViewSheets.GetViewSheetName(sheetIndex);
                    this.ShowMessage($"Now we'll rename the ViewSheet {oldName} we just created.", LocalizationStrings.Title);

                    result = ViewSheets.RenameViewSheet(sheetIndex, sheetName + " #2");
                    if (!result && !this.ShowMessage($"Renaming {oldName} to {sheetName} #2 failed", LocalizationStrings.Title, true))
                    {
                        return(false);
                    }

                    this.ShowMessage($"We've now added 3 new sheets to the list of {ViewSheets.GetSheetCount()} total sheets.", LocalizationStrings.Title);
                }
            }

            return(true);
        }
        /// <summary> Executes the "main" view sheet demo operation. </summary>
        ///
        /// <returns> true if it succeeds, false if it fails. </returns>
        private bool RunMainViewSheetDemo()
        {
            var sheetIndex = ViewSheets.GetActiveViewSheet();

            if (sheetIndex == -1 && !this.ShowMessage(LocalizationStrings.CouldNotFindSheet, LocalizationStrings.Title, true))
            {
                return(false);
            }

            var sheetName = ViewSheets.GetViewSheetName(sheetIndex);

            if (string.IsNullOrWhiteSpace(sheetName) && !this.ShowMessage(LocalizationStrings.CouldNotFindSheet, LocalizationStrings.Title, true))
            {
                return(false);
            }

            this.ShowMessage($"{sheetName} at sheet index {sheetIndex} is the main sheet.", LocalizationStrings.Title);

            return(true);
        }