private void JumpUnreadMenuItem_Click(object sender, EventArgs e)
{
int bgnIdx = ListTab.TabPages.IndexOf(_curTab);
if (ImageSelector.Enabled)
return;
TabModel foundTab = null;
int foundIndex = 0;
DetailsListView lst = null;
//現在タブから最終タブまで探索
for (int i = bgnIdx; i < ListTab.TabPages.Count; i++)
{
var tabPage = this.ListTab.TabPages[i];
var tab = this._statuses.Tabs[tabPage.Text];
var unreadIndex = tab.NextUnreadIndex;
if (unreadIndex != -1)
{
ListTab.SelectedIndex = i;
foundTab = tab;
foundIndex = unreadIndex;
lst = (DetailsListView)tabPage.Tag;
break;
}
}
//未読みつからず&現在タブが先頭ではなかったら、先頭タブから現在タブの手前まで探索
if (foundTab == null && bgnIdx > 0)
{
for (int i = 0; i < bgnIdx; i++)
{
var tabPage = this.ListTab.TabPages[i];
var tab = this._statuses.Tabs[tabPage.Text];
var unreadIndex = tab.NextUnreadIndex;
if (unreadIndex != -1)
{
ListTab.SelectedIndex = i;
foundTab = tab;
foundIndex = unreadIndex;
lst = (DetailsListView)tabPage.Tag;
break;
}
}
}
if (foundTab == null)
{
//全部調べたが未読見つからず→先頭タブの最新発言へ
ListTab.SelectedIndex = 0;
var tabPage = this.ListTab.TabPages[0];
var tab = this._statuses.Tabs[tabPage.Text];
if (tab.AllCount == 0)
return;
if (_statuses.SortOrder == SortOrder.Ascending)
foundIndex = tab.AllCount - 1;
else
foundIndex = 0;
lst = (DetailsListView)tabPage.Tag;
}
SelectListItem(lst, foundIndex);
if (_statuses.SortMode == ComparerMode.Id)
{
if (_statuses.SortOrder == SortOrder.Ascending && lst.Items[foundIndex].Position.Y > lst.ClientSize.Height - _iconSz - 10 ||
_statuses.SortOrder == SortOrder.Descending && lst.Items[foundIndex].Position.Y < _iconSz + 10)
{
MoveTop();
}
else
{
lst.EnsureVisible(foundIndex);
}
}
else
{
lst.EnsureVisible(foundIndex);
}
lst.Focus();
}