OSDN Git Service

TweenMain.ListTab.TabPagesとTabInformations.Tabsの順序を同期させる
authorKimura Youichi <kim.upsilon@bucyou.net>
Tue, 18 Jun 2019 00:00:56 +0000 (09:00 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Sat, 22 Jun 2019 14:10:56 +0000 (23:10 +0900)
OpenTween/Models/TabCollection.cs
OpenTween/Models/TabInformations.cs
OpenTween/Tween.cs

index 4093469..8f1642e 100644 (file)
@@ -25,6 +25,9 @@ namespace OpenTween.Models
 {
     public class TabCollection : KeyedCollection<string, TabModel>
     {
+        public int IndexOf(string tabName)
+            => this.IndexOf(this[tabName]);
+
         public bool TryGetValue(string tabName, out TabModel tab)
             => this.Dictionary.TryGetValue(tabName, out tab);
 
index d3447c9..a166c68 100644 (file)
@@ -164,6 +164,25 @@ namespace OpenTween.Models
             }
         }
 
+        public void ReplaceTab(TabModel tab)
+        {
+            if (!this.ContainsTab(tab.TabName))
+                throw new ArgumentOutOfRangeException(nameof(tab));
+
+            var index = this.Tabs.IndexOf(tab);
+            this.Tabs.RemoveAt(index);
+            this.Tabs.Insert(index, tab);
+        }
+
+        public void MoveTab(int newIndex, TabModel tab)
+        {
+            if (!this.ContainsTab(tab))
+                throw new ArgumentOutOfRangeException(nameof(tab));
+
+            this.Tabs.Remove(tab);
+            this.Tabs.Insert(newIndex, tab);
+        }
+
         public bool ContainsTab(string TabText)
             => this.Tabs.Contains(TabText);
 
@@ -650,10 +669,11 @@ namespace OpenTween.Models
         {
             lock (this.LockObj)
             {
+                var index = this.Tabs.IndexOf(Original);
                 var tb = this.Tabs[Original];
-                this.Tabs.Remove(Original);
+                this.Tabs.RemoveAt(index);
                 tb.TabName = NewName;
-                this.Tabs.Add(tb);
+                this.Tabs.Insert(index, tb);
             }
         }
 
index 4f7f11b..ef95412 100644 (file)
@@ -7466,16 +7466,18 @@ namespace OpenTween
 
             using (ControlTransaction.Layout(this.ListTab))
             {
-                var mTp = this.ListTab.TabPages[targetIndex];
-                this.ListTab.TabPages.Remove(mTp);
+                var tab = this._statuses.Tabs[targetIndex];
+                var tabPage = this.ListTab.TabPages[targetIndex];
+                this.ListTab.TabPages.Remove(tabPage);
 
                 if (targetIndex < baseIndex)
                     baseIndex--;
 
-                if (isBeforeBaseTab)
-                    ListTab.TabPages.Insert(baseIndex, mTp);
-                else
-                    ListTab.TabPages.Insert(baseIndex + 1, mTp);
+                if (!isBeforeBaseTab)
+                    baseIndex++;
+
+                this._statuses.MoveTab(baseIndex, tab);
+                ListTab.TabPages.Insert(baseIndex, tabPage);
             }
 
             SaveConfigsTabs();
@@ -10572,8 +10574,8 @@ namespace OpenTween
                         // 関連発言なら既存のタブを置き換える
                         tb.TabName = relatedTab.TabName;
                         this.ClearTab(tb.TabName, false);
-                        _statuses.Tabs.Remove(tb.TabName);
-                        _statuses.Tabs.Add(tb);
+
+                        this._statuses.ReplaceTab(tb);
 
                         for (int i = 0; i < ListTab.TabPages.Count; i++)
                         {