/// <summary>
 /// Selects all items in a ListBox.
 /// </summary>
 /// <param name="extension">The extension interface.</param>
 /// <param name="control">The base ProdUI control.</param>
 internal static void SelectAllHook(this SelectionItemAdapter extension, BaseProdControl control)
 {
     try
     {
         UiaSelectAll(control);
     }
     catch (ArgumentNullException err)
     {
         throw new ProdOperationException(err);
     }
     catch (ElementNotAvailableException err)
     {
         throw new ProdOperationException(err);
     }
     catch (InvalidOperationException)
     {
         NativeSelectAll(control);
     }
 }
 /// <summary>
 /// Adds the list item to the current selection.
 /// </summary>
 /// <param name="extension">The extension interface.</param>
 /// <param name="control">The base ProdUI control.</param>
 /// <param name="index">The zero-based index of the item to select.</param>
 public static void AddToSelectionHook(this SelectionItemAdapter extension, BaseProdControl control, int index)
 {
     try
     {
         UiaAddToSelection(control, index);
     }
     catch (ArgumentNullException err)
     {
         throw new ProdOperationException(err);
     }
     catch (ElementNotAvailableException err)
     {
         throw new ProdOperationException(err);
     }
     catch (InvalidOperationException)
     {
         NativeAddToSelection(control, index);
     }
 }
 /// <summary>
 /// Gets the selected items.
 /// </summary>
 /// <param name="extension">The extension interface.</param>
 /// <param name="control">The base ProdUI control</param>
 /// <returns>
 /// A List of all currently selected list items
 /// </returns>
 public static Collection <string> GetSelectedItemsHook(this SelectionItemAdapter extension, BaseProdControl control)
 {
     try
     {
         return(UiaGetSelectedItems(control));
     }
     catch (ArgumentNullException err)
     {
         throw new ProdOperationException(err);
     }
     catch (ElementNotAvailableException err)
     {
         throw new ProdOperationException(err);
     }
     catch (InvalidOperationException err)
     {
         throw new ProdOperationException(err);
     }
 }
 /// <summary>
 /// Removes the current element from the collection of selected items.
 /// </summary>
 /// <param name="extension">The extension interface.</param>
 /// <param name="control">The base ProdUI control.</param>
 /// <param name="text">The text of the item to deselect.</param>
 public static void RemoveFromSelectionHook(this SelectionItemAdapter extension, BaseProdControl control, string text)
 {
     try
     {
         UiaRemoveFromSelection(control, text);
     }
     catch (ArgumentNullException err)
     {
         throw new ProdOperationException(err);
     }
     catch (ElementNotAvailableException err)
     {
         throw new ProdOperationException(err);
     }
     catch (InvalidOperationException)
     {
         NativeRemoveFromSelection(control, text);
     }
 }
 /// <summary>
 /// Gets a value that indicates whether an item is selected.
 /// </summary>
 /// <param name="extension">The extension interface.</param>
 /// <param name="control">The base ProdUI control</param>
 /// <returns>
 ///   <c>true</c> if selected, <c>false</c> otherwise
 /// </returns>
 public static bool IsSelectedHook(this SelectionItemAdapter extension, BaseProdControl control)
 {
     try
     {
         return(UiaGetIsSelected(control));
     }
     catch (ArgumentNullException err)
     {
         throw new ProdOperationException(err);
     }
     catch (ElementNotAvailableException err)
     {
         throw new ProdOperationException(err);
     }
     catch (InvalidOperationException)
     {
         if (control.UIAElement.Current.ControlType != ControlType.RadioButton)
         {
             throw new ProdOperationException("This method only works with selectable RadioButtons");
         }
         return(NativeGetIsSelected(control));
     }
 }
 public static bool CanSelectMultipleHook(this SelectionItemAdapter extension, BaseProdControl control)
 {
     return(UiaCanSelectMultiple(control));
 }
 /// <summary>
 /// Gets the AutomationElement that supports the SelectionPattern control pattern and acts as the container for the calling object.
 /// </summary>
 public static AutomationElement SelectionContainer(this SelectionItemAdapter extension, BaseProdControl control)
 {
     throw new NotImplementedException();
 }