OSDN Git Service

装備一覧に同一装備をまとめる階層を追加して見やすくする
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 4 Mar 2018 11:42:01 +0000 (20:42 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 4 Mar 2018 11:42:01 +0000 (20:42 +0900)
KancolleSniffer/ItemTreeView.cs

index 85202af..78ef4a8 100644 (file)
@@ -35,42 +35,61 @@ namespace KancolleSniffer
 \r
         private TreeNode CreateItemNodes(IEnumerable<ItemStatus> itemList)\r
         {\r
-            var grouped = from byItem in (from item in itemList\r
+            var grouped = from item in itemList\r
                 where item.Spec.Id != -1\r
-                orderby item.Spec.Type, item.Spec.Id, item.Alv, item.Level descending\r
-                group item by new {item.Spec.Id, item.Alv, item.Level}\r
-                into grp\r
-                from byShip in\r
-                    (from item in grp\r
-                        let ship = item.Holder\r
-                        orderby ship.Level descending, ship.Spec.SortNo\r
-                        group item by item.Holder.Id)\r
-                group byShip by grp.Key)\r
-                group byItem by byItem.First().First().Spec.Type;\r
+                orderby item.Spec.Type, item.Spec.Id, item.Alv, item.Level\r
+                group item by item.Spec.Type\r
+                into byTypeGroup\r
+                from bySpec in (from item in byTypeGroup\r
+                    group item by item.Spec.Id\r
+                    into bySpecGroup\r
+                    from byParam in (from item in bySpecGroup\r
+                        group item by new {item.Alv, item.Level}\r
+                        into byParamGroup\r
+                        from byHolder in (from item in byParamGroup group item by item.Holder.Id)\r
+                        group byHolder by byParamGroup.Key)\r
+                    group byParam by bySpecGroup.Key)\r
+                group bySpec by byTypeGroup.Key;\r
 \r
             var root = new TreeNode();\r
             foreach (var byType in grouped)\r
             {\r
-                var typeName = byType.First().First().First().Spec.TypeName;\r
+                var typeName = byType.First().First().First().First().Spec.TypeName;\r
                 var typeNode = new TreeNode();\r
                 typeNode.Name = typeNode.Text = typeName;\r
                 root.Nodes.Add(typeNode);\r
-                foreach (var byItem in byType)\r
+                foreach (var bySpec in byType)\r
                 {\r
-                    var item = byItem.First().First();\r
+                    var item = bySpec.First().First().First();\r
                     var itemNode = new TreeNode();\r
-                    itemNode.Name = itemNode.Text = item.Spec.Name +\r
-                                                    (item.Alv == 0 ? "" : "+" + item.Alv) +\r
-                                                    (item.Level == 0 ? "" : "★" + item.Level);\r
+                    itemNode.Name = itemNode.Text = item.Spec.Name + "x" +\r
+                                                    bySpec.SelectMany(spec => spec).SelectMany(param => param).Count();\r
                     typeNode.Nodes.Add(itemNode);\r
-                    foreach (var byShip in byItem)\r
+                    foreach (var byParam in bySpec)\r
                     {\r
-                        var ship = byShip.First().Holder;\r
-                        var name = byShip.Key == -1\r
-                            ? "未装備x" + byShip.Count()\r
-                            : (ship.Fleet != -1 ? ship.Fleet + 1 + " " : "") +\r
-                              ship.Name + (ship.Level > 0 ? "Lv" + ship.Level : "") + "×" + byShip.Count();\r
-                        itemNode.Nodes.Add(name, name);\r
+                        TreeNode paramNode;\r
+                        if (bySpec.Count() == 1 && byParam.Key.Alv == 0 && byParam.Key.Level == 0)\r
+                        {\r
+                            paramNode = itemNode;\r
+                        }\r
+                        else\r
+                        {\r
+                            paramNode = new TreeNode();\r
+                            item = byParam.First().First();\r
+                            paramNode.Name = paramNode.Text =\r
+                                (item.Spec.IsAircraft ? "+" + item.Alv : "") + "★" + item.Level + "x" +\r
+                                byParam.SelectMany(param => param).Count();\r
+                            itemNode.Nodes.Add(paramNode);\r
+                        }\r
+                        foreach (var byShip in byParam)\r
+                        {\r
+                            var ship = byShip.First().Holder;\r
+                            var name = byShip.Key == -1\r
+                                ? "未装備x" + byShip.Count()\r
+                                : (ship.Fleet != -1 ? ship.Fleet + 1 + " " : "") +\r
+                                  ship.Name + (ship.Level > 0 ? "Lv" + ship.Level : "") + "x" + byShip.Count();\r
+                            paramNode.Nodes.Add(name, name);\r
+                        }\r
                     }\r
                 }\r
             }\r
@@ -93,7 +112,7 @@ namespace KancolleSniffer
                 // ReSharper disable PossibleNullReferenceException\r
                 => x.Level == y.Level && x.Spec == y.Spec && x.Holder.Id == y.Holder.Id &&\r
                    x.Holder.Fleet == y.Holder.Fleet;\r
-                // ReSharper restore PossibleNullReferenceException\r
+            // ReSharper restore PossibleNullReferenceException\r
 \r
             public int GetHashCode(ItemStatus obj) => obj.Level + obj.Spec.GetHashCode() + obj.Holder.GetHashCode();\r
         }\r