• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

Revision98c69fed92d6424a0647e0bcb0f5469c27d19749 (tree)
Time2011-01-31 18:56:27
Authorazyobuzin <azyobuzin@user...>
Commiterazyobuzin

Log Message

StatusListViewでアイテムをキャッシュするようにした(そんなにテストしてない)

Change Summary

  • delete: "\202\302\202\242\202\351\202\361\202\351\202\361/Controls/StatusesListView.cs"

Incremental Difference

--- "a/\202\302\202\242\202\351\202\361\202\351\202\361/Controls/StatusesListView.cs"
+++ "b/\202\302\202\242\202\351\202\361\202\351\202\361/Controls/StatusesListView.cs"
@@ -1,5 +1,7 @@
1-using System.Collections.Generic;
1+using System;
2+using System.Collections.Generic;
23 using System.Drawing;
4+using System.Linq;
35 using System.Windows.Forms;
46
57 namespace Azyobuzi.Twirunrun
@@ -13,6 +15,7 @@ namespace Azyobuzi.Twirunrun
1315 this.VirtualMode = true;
1416 this.HeaderStyle = ColumnHeaderStyle.None;
1517 this.FullRowSelect = true;
18+ this.CacheVirtualItems += this_CacheVirtualItems;
1619 this.RetrieveVirtualItem += this_RetrieveVirtualItem;
1720 this.Columns.Add("名前", Settings.Instance.NameWidth);
1821 this.Columns.Add("投稿");
@@ -49,9 +52,8 @@ namespace Azyobuzi.Twirunrun
4952 SetItemsCount(Statuses.Count);
5053 }
5154
52- private void this_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
55+ private ListViewItem CreateListViewItem(StatusInfo item)
5356 {
54- var item = Statuses[e.ItemIndex];
5557 var s = Settings.Instance;
5658
5759 var lvi = new ListViewItem();
@@ -63,7 +65,25 @@ namespace Azyobuzi.Twirunrun
6365
6466 lvi.SubItems.Add(item.Text.Replace('\n', ' '));
6567
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;
6787 }
6888
6989 //ラベルは保留