private void lvGames_MouseClick(object sender, MouseEventArgs e)
        {
            ListView     lv  = (ListView)sender;
            ListViewItem lvi = lv.GetItemAt(e.X, e.Y);

            if (lvi != null)
            {
                if (e.X < (lvi.Bounds.Left + 16))
                {
                    if (lv.SelectedIndices.Contains(lvi.Index))
                    {
                        SteamLaunchable app = SteamApps[lvi.Index];
                        if (!CheckedItemMap.ContainsKey(app))
                        {
                            CheckedItemMap[app] = false;
                        }
                        CheckedItemMap[app] = !CheckedItemMap[app];
                        if (lv.SelectedIndices.Count > 0)
                        {
                            foreach (int index in lv.SelectedIndices)
                            {
                                SteamLaunchable appX = SteamApps[index];
                                if (!CheckedItemMap.ContainsKey(appX))
                                {
                                    CheckedItemMap[appX] = false;
                                }
                                CheckedItemMap[appX] = CheckedItemMap[app];
                            }
                            lv.Invalidate();
                        }
                    }
                    else
                    {
                        SteamLaunchable app = SteamApps[lvi.Index];
                        if (!CheckedItemMap.ContainsKey(app))
                        {
                            CheckedItemMap[app] = false;
                        }
                        CheckedItemMap[app] = !CheckedItemMap[app];
                        lv.Invalidate(lvi.Bounds);
                    }
                }
            }
        }
        private void lvGames_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
        {
            SteamLaunchable item = SteamApps[e.ItemIndex];

            if (e.Item == null)
            {
                e.Item = new ListViewItem(item.Title);
            }
            UInt64 gameid = item.GetShortcutID();

            e.Item.SubItems.Add(gameid.ToString());
            e.Item.SubItems.Add(item.AppType);
            if (IsInstalled.Contains(gameid))
            {
                e.Item.SubItems.Add("Y");
            }
            else
            {
                e.Item.SubItems.Add("N");
            }
            if (KnownSteamGames.Contains(gameid))
            {
                e.Item.SubItems.Add("Y");
            }
            else
            {
                e.Item.SubItems.Add("N");
            }
            if (!string.IsNullOrEmpty(item.Icon) && File.Exists(item.Icon))
            {
                if (!lvGames.SmallImageList.Images.ContainsKey(item.Icon))
                {
                    lvGames.SmallImageList.Images.Add(item.Icon, Icon.ExtractAssociatedIcon(item.Icon));
                }
                e.Item.ImageKey = item.Icon;
            }
            else
            {
                e.Item.ImageKey = "default";
            }
        }
        private void lvGames_DrawItem(object sender, DrawListViewItemEventArgs e)
        {
            e.DrawDefault = true;
            if (lvGames.SmallImageList.Images.ContainsKey(e.Item.ImageKey))
            {
                Rectangle rect = e.Bounds;
                rect.Width  = 16;
                rect.Height = 16;
                rect.X     += 16;
                e.Graphics.DrawImage(lvGames.SmallImageList.Images[e.Item.ImageKey], rect);
            }

            /*if (!e.Item.Checked)
             * {
             *  e.Item.Checked = true;
             *  e.Item.Checked = false;
             * }*/
            {
                Rectangle rect = e.Bounds;
                rect.Width  = 10;
                rect.Height = 10;
                rect.X     += 2;
                rect.Y     += 2;
                e.Graphics.DrawRectangle(Pens.Black, rect);
            }
            SteamLaunchable app = SteamApps[e.ItemIndex];

            if (CheckedItemMap.ContainsKey(app) && CheckedItemMap[app])
            {
                Rectangle rect = e.Bounds;
                rect.Width  = 7;
                rect.Height = 7;
                rect.X     += 4;
                rect.Y     += 4;
                e.Graphics.FillRectangle(Brushes.Black, rect);
            }
        }