public void InvertSelectedItems(object sender, EventArgs e)
        {
            var selected = _listView.ListView.CheckBoxes ? _listView.CheckedObjects : _listView.SelectedObjects;
            var inverted = FilteredUninstallers.Except(selected);

            ChangeSelection(inverted);
        }
        public void InvertSelectedItems(object sender, EventArgs e)
        {
            var selectedObjects = _listView.SelectedObjects;

            _listView.ListView.DeselectAll();
            _listView.ListView.SelectObjects(FilteredUninstallers.Where(x => !selectedObjects.Contains(x)).ToList());
            _listView.ListView.Focus();
        }
        /// <summary>
        ///     Select first item starting with the keycode.
        ///     If keycode leads to a valid selection true is returned. Otherwise, if there is nothing relevant to select false is
        ///     returned.
        /// </summary>
        public bool SelectItemFromKeystroke(Keys keyCode)
        {
            var keyName = keyCode.ToLetterOrNumberString();

            if (keyName != null)
            {
                var selectedObj = FilteredUninstallers.FirstOrDefault(x => x.DisplayName.StartsWith(keyName, StringComparison.InvariantCultureIgnoreCase));

                _listView.ListView.DeselectAll();

                if (selectedObj != null)
                {
                    _listView.ListView.SelectObject(selectedObj, true);
                    _listView.ListView.EnsureModelVisible(selectedObj);

                    return(true);
                }
            }
            return(false);
        }
        /*public bool DisplayWindowsFeatures()
         * {
         *  if (ListRefreshIsRunning)
         *      return false;
         *
         *  ListRefreshIsRunning = true;
         *  _reference.LockApplication(true);
         *
         *  var error = LoadingDialog.ShowDialog(Localisable.LoadingDialogTitleLoadingWindowsFeatures, x =>
         *  {
         *      var items = UninstallManager.GetWindowsFeaturesList(y =>
         *      {
         *          x.SetMaximum(y.TotalCount);
         *          x.SetProgress(y.CurrentCount);
         *      });
         *
         *      AllUninstallers =
         *          AllUninstallers.Where(e => e.UninstallerKind != UninstallerType.Dism).Concat(items).ToList();
         *      _listView.ListView.SafeInvoke(() => _listView.ListView.SetObjects(AllUninstallers, false));
         *  });
         *
         *  if (error != null)
         *      PremadeDialogs.GenericError(error);
         *
         *  _reference.LockApplication(false);
         *  ListRefreshIsRunning = false;
         *
         *  return error == null;
         * }*/

        /// <summary>
        ///     Get total size of all visible uninstallers.
        /// </summary>
        public FileSize GetFilteredSize()
        {
            return(FilteredUninstallers.Select(x => x.EstimatedSize).DefaultIfEmpty(FileSize.Empty)
                   .Aggregate((size1, size2) => size1 + size2));
        }