From 1b6dd99e78e52d1837c51ce6f4a29f451b548883 Mon Sep 17 00:00:00 2001 From: Kimura Youichi Date: Sat, 3 Sep 2016 23:39:05 +0900 Subject: [PATCH] =?utf8?q?=E3=82=BF=E3=83=96=E5=86=85=E3=81=AE=E7=99=BA?= =?utf8?q?=E8=A8=80=E3=82=92=E6=A4=9C=E7=B4=A2=E3=81=99=E3=82=8B=E3=81=9F?= =?utf8?q?=E3=82=81=E3=81=ABVirtualListSize=E3=82=92=E5=8F=82=E7=85=A7?= =?utf8?q?=E3=81=97=E3=81=A6=E3=81=84=E3=82=8B=E7=AE=87=E6=89=80=E3=82=92T?= =?utf8?q?abModel.AllCount=E3=81=AB=E7=BD=AE=E3=81=8D=E6=8F=9B=E3=81=88?= =?utf8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- OpenTween/Tween.cs | 119 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 70 insertions(+), 49 deletions(-) diff --git a/OpenTween/Tween.cs b/OpenTween/Tween.cs index f03cfce7..ef729bd8 100644 --- a/OpenTween/Tween.cs +++ b/OpenTween/Tween.cs @@ -5467,74 +5467,88 @@ namespace OpenTween private void JumpUnreadMenuItem_Click(object sender, EventArgs e) { int bgnIdx = ListTab.TabPages.IndexOf(_curTab); - int idx = -1; - DetailsListView lst = null; if (ImageSelector.Enabled) return; + TabModel foundTab = null; + DetailsListView lst = null; + //現在タブから最終タブまで探索 for (int i = bgnIdx; i < ListTab.TabPages.Count; i++) { - //未読Index取得 - idx = _statuses.Tabs[ListTab.TabPages[i].Text].NextUnreadIndex; - if (idx > -1) + var tabPage = this.ListTab.TabPages[i]; + var tab = this._statuses.Tabs[tabPage.Text]; + + if (tab.NextUnreadIndex != -1) { ListTab.SelectedIndex = i; - lst = (DetailsListView)ListTab.TabPages[i].Tag; - //_curTab = ListTab.TabPages[i]; + foundTab = tab; + lst = (DetailsListView)tabPage.Tag; break; } } //未読みつからず&現在タブが先頭ではなかったら、先頭タブから現在タブの手前まで探索 - if (idx == -1 && bgnIdx > 0) + if (foundTab == null && bgnIdx > 0) { for (int i = 0; i < bgnIdx; i++) { - idx = _statuses.Tabs[ListTab.TabPages[i].Text].NextUnreadIndex; - if (idx > -1) + var tabPage = this.ListTab.TabPages[i]; + var tab = this._statuses.Tabs[tabPage.Text]; + + if (tab.NextUnreadIndex != -1) { ListTab.SelectedIndex = i; - lst = (DetailsListView)ListTab.TabPages[i].Tag; - //_curTab = ListTab.TabPages[i]; + foundTab = tab; + lst = (DetailsListView)tabPage.Tag; break; } } } - //全部調べたが未読見つからず→先頭タブの最新発言へ - if (idx == -1) + int idx; + if (foundTab != null) + { + idx = foundTab.NextUnreadIndex; + } + else { + //全部調べたが未読見つからず→先頭タブの最新発言へ ListTab.SelectedIndex = 0; - lst = (DetailsListView)ListTab.TabPages[0].Tag; - //_curTab = ListTab.TabPages[0]; + var tabPage = this.ListTab.TabPages[0]; + var tab = this._statuses.Tabs[tabPage.Text]; + + if (tab.AllCount == 0) + return; + if (_statuses.SortOrder == SortOrder.Ascending) - idx = lst.VirtualListSize - 1; + idx = tab.AllCount - 1; else idx = 0; + + lst = (DetailsListView)tabPage.Tag; } - if (lst.VirtualListSize > 0 && idx > -1 && lst.VirtualListSize > idx) + SelectListItem(lst, idx); + + if (_statuses.SortMode == ComparerMode.Id) { - SelectListItem(lst, idx); - if (_statuses.SortMode == ComparerMode.Id) + if (_statuses.SortOrder == SortOrder.Ascending && lst.Items[idx].Position.Y > lst.ClientSize.Height - _iconSz - 10 || + _statuses.SortOrder == SortOrder.Descending && lst.Items[idx].Position.Y < _iconSz + 10) { - if (_statuses.SortOrder == SortOrder.Ascending && lst.Items[idx].Position.Y > lst.ClientSize.Height - _iconSz - 10 || - _statuses.SortOrder == SortOrder.Descending && lst.Items[idx].Position.Y < _iconSz + 10) - { - MoveTop(); - } - else - { - lst.EnsureVisible(idx); - } + MoveTop(); } else { lst.EnsureVisible(idx); } } + else + { + lst.EnsureVisible(idx); + } + lst.Focus(); } @@ -6567,21 +6581,24 @@ namespace OpenTween private void GoPost(bool forward) { - if (_curList.SelectedIndices.Count == 0 || _curPost == null) return; - int fIdx = 0; - int toIdx = 0; - int stp = 1; + if (_curList.SelectedIndices.Count == 0 || _curPost == null) + return; + + var tab = this._statuses.Tabs[this._curTab.Text]; + var selectedIndex = this._curList.SelectedIndices[0]; + + int fIdx, toIdx, stp; if (forward) { - fIdx = _curList.SelectedIndices[0] + 1; - if (fIdx > _curList.VirtualListSize - 1) return; - toIdx = _curList.VirtualListSize; + fIdx = selectedIndex + 1; + if (fIdx > tab.AllCount - 1) return; + toIdx = tab.AllCount; stp = 1; } else { - fIdx = _curList.SelectedIndices[0] - 1; + fIdx = selectedIndex - 1; if (fIdx < 0) return; toIdx = -1; stp = -1; @@ -6598,9 +6615,10 @@ namespace OpenTween } for (int idx = fIdx; idx != toIdx; idx += stp) { - if (_statuses.Tabs[_curTab.Text][idx].RetweetedId == null) + var post = tab[idx]; + if (post.RetweetedId == null) { - if (_statuses.Tabs[_curTab.Text][idx].ScreenName == name) + if (post.ScreenName == name) { SelectListItem(_curList, idx); _curList.EnsureVisible(idx); @@ -6609,7 +6627,7 @@ namespace OpenTween } else { - if (_statuses.Tabs[_curTab.Text][idx].RetweetedBy == name) + if (post.RetweetedBy == name) { SelectListItem(_curList, idx); _curList.EnsureVisible(idx); @@ -6621,21 +6639,24 @@ namespace OpenTween private void GoRelPost(bool forward) { - if (_curList.SelectedIndices.Count == 0) return; + if (this._curList.SelectedIndices.Count == 0) + return; + + var tab = this._statuses.Tabs[this._curTab.Text]; + var selectedIndex = this._curList.SelectedIndices[0]; + + int fIdx, toIdx, stp; - int fIdx = 0; - int toIdx = 0; - int stp = 1; if (forward) { - fIdx = _curList.SelectedIndices[0] + 1; - if (fIdx > _curList.VirtualListSize - 1) return; - toIdx = _curList.VirtualListSize; + fIdx = selectedIndex + 1; + if (fIdx > tab.AllCount - 1) return; + toIdx = tab.AllCount; stp = 1; } else { - fIdx = _curList.SelectedIndices[0] - 1; + fIdx = selectedIndex - 1; if (fIdx < 0) return; toIdx = -1; stp = -1; @@ -6654,7 +6675,7 @@ namespace OpenTween for (int idx = fIdx; idx != toIdx; idx += stp) { - PostClass post = _statuses.Tabs[_curTab.Text][idx]; + var post = tab[idx]; if (post.ScreenName == _anchorPost.ScreenName || post.RetweetedBy == _anchorPost.ScreenName || post.ScreenName == _anchorPost.RetweetedBy || -- 2.11.0