| Revision | 98c69fed92d6424a0647e0bcb0f5469c27d19749 (tree) |
|---|---|
| Time | 2011-01-31 18:56:27 |
| Author | azyobuzin <azyobuzin@user...> |
| Commiter | azyobuzin |
StatusListViewでアイテムをキャッシュするようにした(そんなにテストしてない)
| @@ -1,5 +1,7 @@ | ||
| 1 | -using System.Collections.Generic; | |
| 1 | +using System; | |
| 2 | +using System.Collections.Generic; | |
| 2 | 3 | using System.Drawing; |
| 4 | +using System.Linq; | |
| 3 | 5 | using System.Windows.Forms; |
| 4 | 6 | |
| 5 | 7 | namespace Azyobuzi.Twirunrun |
| @@ -13,6 +15,7 @@ namespace Azyobuzi.Twirunrun | ||
| 13 | 15 | this.VirtualMode = true; |
| 14 | 16 | this.HeaderStyle = ColumnHeaderStyle.None; |
| 15 | 17 | this.FullRowSelect = true; |
| 18 | + this.CacheVirtualItems += this_CacheVirtualItems; | |
| 16 | 19 | this.RetrieveVirtualItem += this_RetrieveVirtualItem; |
| 17 | 20 | this.Columns.Add("名前", Settings.Instance.NameWidth); |
| 18 | 21 | this.Columns.Add("投稿"); |
| @@ -49,9 +52,8 @@ namespace Azyobuzi.Twirunrun | ||
| 49 | 52 | SetItemsCount(Statuses.Count); |
| 50 | 53 | } |
| 51 | 54 | |
| 52 | - private void this_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) | |
| 55 | + private ListViewItem CreateListViewItem(StatusInfo item) | |
| 53 | 56 | { |
| 54 | - var item = Statuses[e.ItemIndex]; | |
| 55 | 57 | var s = Settings.Instance; |
| 56 | 58 | |
| 57 | 59 | var lvi = new ListViewItem(); |
| @@ -63,7 +65,25 @@ namespace Azyobuzi.Twirunrun | ||
| 63 | 65 | |
| 64 | 66 | lvi.SubItems.Add(item.Text.Replace('\n', ' ')); |
| 65 | 67 | |
| 66 | - e.Item = lvi; | |
| 68 | + return lvi; | |
| 69 | + } | |
| 70 | + | |
| 71 | + Dictionary<int, ListViewItem> itemcache = new Dictionary<int, ListViewItem>(); | |
| 72 | + | |
| 73 | + private void this_CacheVirtualItems(object sender, CacheVirtualItemsEventArgs e) | |
| 74 | + { | |
| 75 | + itemcache.Clear(); | |
| 76 | + Enumerable.Range(e.StartIndex, e.EndIndex - e.StartIndex) | |
| 77 | + .Select(index => Tuple.Create(index, CreateListViewItem(Statuses[index]))) | |
| 78 | + .ForEach(_ => itemcache.Add(_.Item1, _.Item2)); | |
| 79 | + } | |
| 80 | + | |
| 81 | + private void this_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) | |
| 82 | + { | |
| 83 | + ListViewItem item = null; | |
| 84 | + bool result = itemcache.TryGetValue(e.ItemIndex, out item); | |
| 85 | + if (!result) item = CreateListViewItem(Statuses[e.ItemIndex]); | |
| 86 | + e.Item = item; | |
| 67 | 87 | } |
| 68 | 88 | |
| 69 | 89 | //ラベルは保留 |