OSDN Git Service

艦娘一覧でこれまでの逆順でソートできるようにする
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Tue, 9 May 2017 12:10:21 +0000 (21:10 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Tue, 9 May 2017 12:10:21 +0000 (21:10 +0900)
KancolleSniffer/ListForm.cs
KancolleSniffer/ShipListPanel.cs

index 023dedb..f813f81 100644 (file)
@@ -31,7 +31,11 @@ namespace KancolleSniffer
         {\r
             None,\r
             Cond,\r
+            CondAscend = Cond,\r
+            CondDescend,\r
             ExpToNext,\r
+            ExpToNextAscend = ExpToNext,\r
+            ExpToNextDescend,\r
             Repair\r
         }\r
 \r
@@ -96,14 +100,22 @@ namespace KancolleSniffer
                     labelHeaderCond.Text = "cond";\r
                     labelHeaderExp.Text = "Exp";\r
                     break;\r
-                case SortOrder.Cond:\r
+                case SortOrder.CondAscend:\r
                     labelHeaderCond.Text = "cond▴";\r
                     labelHeaderExp.Text = "Exp";\r
                     break;\r
-                case SortOrder.ExpToNext:\r
+                case SortOrder.CondDescend:\r
+                    labelHeaderCond.Text = "cond▾";\r
+                    labelHeaderExp.Text = "Exp";\r
+                    break;\r
+                case SortOrder.ExpToNextAscend:\r
                     labelHeaderCond.Text = "cond";\r
                     labelHeaderExp.Text = "Exp▴";\r
                     break;\r
+                case SortOrder.ExpToNextDescend:\r
+                    labelHeaderCond.Text = "cond";\r
+                    labelHeaderExp.Text = "Exp▾";\r
+                    break;\r
             }\r
         }\r
 \r
@@ -249,15 +261,37 @@ namespace KancolleSniffer
 \r
         private void labelHeaderCond_Click(object sender, EventArgs e)\r
         {\r
-            _config.ShipList.SortOrder = _config.ShipList.SortOrder == SortOrder.Cond ? SortOrder.None : SortOrder.Cond;\r
+            var sl = _config.ShipList;\r
+            switch (sl.SortOrder)\r
+            {\r
+                case SortOrder.CondAscend:\r
+                    sl.SortOrder = SortOrder.CondDescend;\r
+                    break;\r
+                case SortOrder.CondDescend:\r
+                    sl.SortOrder = SortOrder.None;\r
+                    break;\r
+                default:\r
+                    sl.SortOrder = SortOrder.CondAscend;\r
+                    break;\r
+            }\r
             UpdateList();\r
         }\r
 \r
         private void labelHeaderExp_Click(object sender, EventArgs e)\r
         {\r
-            _config.ShipList.SortOrder = _config.ShipList.SortOrder == SortOrder.ExpToNext\r
-                ? SortOrder.None\r
-                : SortOrder.ExpToNext;\r
+            var sl = _config.ShipList;\r
+            switch (sl.SortOrder)\r
+            {\r
+                case SortOrder.ExpToNextAscend:\r
+                    sl.SortOrder = SortOrder.ExpToNextDescend;\r
+                    break;\r
+                case SortOrder.ExpToNextDescend:\r
+                    sl.SortOrder = SortOrder.None;\r
+                    break;\r
+                default:\r
+                    sl.SortOrder = SortOrder.ExpToNextAscend;\r
+                    break;\r
+            }\r
             UpdateList();\r
         }\r
 \r
index bce3909..a3ec97f 100644 (file)
@@ -145,26 +145,43 @@ namespace KancolleSniffer
             {\r
                 if (a == null || b == null)\r
                     throw new ArgumentNullException();\r
-                if (_shipType && a.Spec.ShipType != b.Spec.ShipType)\r
-                    return a.Spec.ShipType - b.Spec.ShipType;\r
-                switch (_order)\r
+                if (_shipType)\r
                 {\r
-                    case ListForm.SortOrder.None:\r
-                    case ListForm.SortOrder.ExpToNext:\r
-                        break;\r
-                    case ListForm.SortOrder.Cond:\r
-                        if (a.Cond != b.Cond)\r
-                            return a.Cond - b.Cond;\r
-                        break;\r
-                    case ListForm.SortOrder.Repair:\r
-                        if (a.RepairTime != b.RepairTime)\r
-                            return (int)(b.RepairTime - a.RepairTime).TotalSeconds;\r
-                        break;\r
+                    if (a.Spec.ShipType != b.Spec.ShipType)\r
+                        return a.Spec.ShipType - b.Spec.ShipType;\r
+                    if (a.Level != b.Level)\r
+                    {\r
+                        if (a.Level == 1000)\r
+                            return -1;\r
+                        if (b.Level == 1000)\r
+                            return 1;\r
+                    }\r
+                }\r
+                if (_order == ListForm.SortOrder.Repair && a.RepairTime != b.RepairTime)\r
+                    return (int)(b.RepairTime - a.RepairTime).TotalSeconds;\r
+                if (a.Cond != b.Cond)\r
+                {\r
+                    if (_order == ListForm.SortOrder.CondAscend)\r
+                        return a.Cond - b.Cond;\r
+                    if (_order == ListForm.SortOrder.CondDescend)\r
+                        return b.Cond - a.Cond;\r
+                }\r
+                if (a.Level != b.Level)\r
+                {\r
+                    if (_order == ListForm.SortOrder.ExpToNextAscend)\r
+                        return b.Level - a.Level;\r
+                    if (_order == ListForm.SortOrder.ExpToNextDescend)\r
+                        return a.Level - b.Level;\r
+                    if (!_shipType) // Condが同じかSortOrder.Noneで艦種なし\r
+                        return b.Level - a.Level;\r
+                }\r
+                if (a.ExpToNext != b.ExpToNext)\r
+                {\r
+                    if (_order == ListForm.SortOrder.ExpToNextAscend)\r
+                        return a.ExpToNext - b.ExpToNext;\r
+                    if (_order == ListForm.SortOrder.ExpToNextDescend)\r
+                        return b.ExpToNext - a.ExpToNext;\r
                 }\r
-                if ((!_shipType || _order == ListForm.SortOrder.ExpToNext) && a.Level != b.Level)\r
-                    return b.Level - a.Level;\r
-                if (_order == ListForm.SortOrder.ExpToNext && a.ExpToNext != b.ExpToNext)\r
-                    return a.ExpToNext - b.ExpToNext;\r
                 if (a.Spec.SortNo != b.Spec.SortNo)\r
                     return a.Spec.SortNo - b.Spec.SortNo;\r
                 return a.Id - b.Id;\r