Bläddra i källkod

feat: 改成龙猫想要的样子

tangge233 2 år sedan
förälder
incheckning
cfe925c667

+ 11 - 12
Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml

@@ -7,7 +7,8 @@
     <Grid>
         <Grid x:Name="PanAllBack">
             <local:MyScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" x:Name="PanBack">
-                <StackPanel x:Name="PanMain" Margin="25,10,25,10" Grid.IsSharedSizeScope="True"> <!-- 若显示多选模块则为 92 -->
+                <StackPanel x:Name="PanMain" Margin="25,10,25,10" Grid.IsSharedSizeScope="True">
+                    <!-- 若显示多选模块则为 92 -->
                     <local:MySearchBox Margin="0,15" HintText="搜索 Mod 名称 / 描述 / 标签" x:Name="SearchBox" />
                     <local:MyCard Grid.Row="0" Margin="0,0,0,15" x:Name="PanManage">
                         <Grid Margin="15,15,0,15" Height="35">
@@ -23,17 +24,15 @@
                             <local:MyButton x:Name="BtnManageCheck" Grid.Column="3" MinWidth="140" Text="检查 Mod" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" ToolTip="快速检查 Mod 的版本要求、重复、前置缺失等问题。&#xa;结果仅供参考,由于部分 Mod 标注的信息有误,可能并不准确。" Visibility="Collapsed" />
                         </Grid>
                     </local:MyCard>
-                    <local:MyCard x:Name="PanUpdateListBack" VerticalAlignment="Top" Opacity="0" Margin="0,0,0,15" Title=" " MinHeight="40" CanSwap="True">
-                        <StackPanel Margin="20,38,18,18" Name="PanUpdateList" VerticalAlignment="Top" />
-                    </local:MyCard>
-                    <local:MyCard x:Name="PanDefaultListBack" VerticalAlignment="Top" Opacity="0" Margin="0,0,0,15" Title=" " MinHeight="40" CanSwap="True">
-                        <StackPanel Margin="20,38,18,18" Name="PanDefaultList" VerticalAlignment="Top" />
-                    </local:MyCard>
-                    <local:MyCard x:Name="PanDisabledListBack" VerticalAlignment="Top" Opacity="0" Margin="0,0,0,15" Title=" " MinHeight="40" CanSwap="True">
-                        <StackPanel Margin="20,38,18,18" Name="PanDisabledList" VerticalAlignment="Top" />
-                    </local:MyCard>
-                    <local:MyCard x:Name="PanUnavaliableListBack" VerticalAlignment="Top" Opacity="0" Margin="0,0,0,15" Title=" " MinHeight="40" CanSwap="True">
-                        <StackPanel Margin="20,38,18,18" Name="PanUnavaliableList" VerticalAlignment="Top" />
+                    <local:MyCard x:Name="PanListBack" VerticalAlignment="Top" Opacity="0" Margin="0,0,0,15" Title=" " MinHeight="40">
+                        <StackPanel Margin="13" Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Right" Height="20">
+                            <local:MyTextButton Height="20" Margin="4,0" Tag="All"  Text="全部" x:Name="BtnTypeAll"/>
+                            <local:MyTextButton Height="20" Margin="4,0" Tag="Enabled" Text="已启用" x:Name="BtnTypeEnabled"/>
+                            <local:MyTextButton Height="20" Margin="4,0" Tag="Disabled" Text="已禁用" x:Name="BtnTypeDisabled"/>
+                            <local:MyTextButton Height="20" Margin="4,0" Tag="CanUpdate" Text="可更新" x:Name="BtnTypeCanUpdate"/>
+                            <local:MyTextButton Height="20" Margin="4,0" Tag="Error" Text="错误" x:Name="BtnTypeError"/>
+                        </StackPanel>
+                        <StackPanel Margin="20,38,18,18" Name="PanList" VerticalAlignment="Top" />
                     </local:MyCard>
                 </StackPanel>
             </local:MyScrollViewer>

+ 76 - 77
Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml.vb

@@ -25,6 +25,7 @@
     ''' 刷新 Mod 列表。
     ''' </summary>
     Public Sub RefreshList(Optional ForceReload As Boolean = False)
+        ViewModType = "All"
         If LoaderFolderRun(McModLoader, PageVersionLeft.Version.PathIndie & "mods\", If(ForceReload, LoaderFolderRunType.ForceRun, LoaderFolderRunType.RunOnUpdated)) Then
             Log("[System] 已刷新 Mod 列表")
             PanBack.ScrollToHome()
@@ -125,49 +126,68 @@
     ''' 刷新结果显示。
     ''' </summary>
     Private Sub RefreshResult(Mods As List(Of McMod))
-        PanDefaultList.Children.Clear()
-        PanDisabledList.Children.Clear()
-        PanUpdateList.Children.Clear()
-        PanUnavaliableList.Children.Clear()
-        For Each TargetMod In Mods
-            If TargetMod.CanUpdate Then
-                PanUpdateList.Children.Add(ModItems(TargetMod.RawFileName))
-            ElseIf TargetMod.State.Equals(McMod.McModState.Fine) Then
-                PanDefaultList.Children.Add(ModItems(TargetMod.RawFileName))
-            ElseIf TargetMod.State.Equals(McMod.McModState.Disabled) Then
-                PanDisabledList.Children.Add(ModItems(TargetMod.RawFileName))
-            Else
-                PanUnavaliableList.Children.Add(ModItems(TargetMod.RawFileName))
+        Dim ShowMods As List(Of McMod) = New List(Of McMod)
+        Select Case ViewModType
+            Case "All"
+                ShowMods = Mods
+            Case "Enabled"
+                For Each Item In Mods
+                    If Item.State.Equals(McMod.McModState.Fine) Then ShowMods.Add(Item)
+                Next
+            Case "Disabled"
+                For Each Item In Mods
+                    If Item.State.Equals(McMod.McModState.Disabled) Then ShowMods.Add(Item)
+                Next
+            Case "CanUpdate"
+                For Each Item In Mods
+                    If Item.CanUpdate Then ShowMods.Add(Item)
+                Next
+            Case "Error"
+                For Each Item In Mods
+                    If Item.State.Equals(McMod.McModState.Unavaliable) Then ShowMods.Add(Item)
+                Next
+        End Select
+        PanList.Children.Clear()
+        For Each TargetMod In ShowMods
+            PanList.Children.Add(ModItems(TargetMod.RawFileName))
+        Next
+        Dim ModEnabled As Integer = 0
+        Dim ModDisabled As Integer = 0
+        Dim ModCanUpdate As Integer = 0
+        Dim ModError As Integer = 0
+        For Each ModItem In ModItems
+            If ModItem.Value.Entry.CanUpdate Then
+                ModCanUpdate += 1
+            End If
+            If ModItem.Value.Entry.State.Equals(McMod.McModState.Fine) Then
+                ModEnabled += 1
+            End If
+            If ModItem.Value.Entry.State.Equals(McMod.McModState.Disabled) Then
+                ModDisabled += 1
+            End If
+            If ModItem.Value.Entry.State.Equals(McMod.McModState.Unavaliable) Then
+                ModError += 1
             End If
         Next
+        BtnTypeAll.Text = $"全部({ModEnabled + ModDisabled + ModCanUpdate + ModError})"
+        BtnTypeCanUpdate.Text = $"可更新({ModCanUpdate})"
+        BtnTypeEnabled.Text = $"已启用({ModEnabled})"
+        BtnTypeDisabled.Text = $"已禁用({ModDisabled})"
+        BtnTypeError.Text = $"错误({ModError})"
         RefreshTitle()
     End Sub
     ''' <summary>
     ''' 刷新卡片标题。
     ''' </summary>
     Private Sub RefreshTitle()
-        RefreshTargetTitle(PanDefaultListBack, PanDefaultList, "已启用 Mod")
-        RefreshTargetTitle(PanUpdateListBack, PanUpdateList, "可更新 Mod")
-        '没有可以更新的 Mod 就暂时隐藏卡片
-        PanUpdateListBack.Visibility = If(PanUpdateList.Children.Count.Equals(0), Visibility.Collapsed, Visibility.Visible)
-        RefreshTargetTitle(PanDisabledListBack, PanDisabledList, "已禁用的 Mod")
-        RefreshTargetTitle(PanUnavaliableListBack, PanUnavaliableList, "暂不可用 Mod")
-    End Sub
-
-    Private Sub RefreshTargetTitle(Card As MyCard, List As StackPanel, Name As String)
-        Dim Mods = List.Children.Cast(Of MyLocalModItem).ToList
         If Not IsSearching Then
-            Card.Title = Name & " 列表 (" & Mods.Count & ")"
-        ElseIf Mods.Any() Then
-            Card.Title = Name & " 列表搜索结果 (" & Mods.Count & ")"
+            PanListBack.Title = "Mod 列表 (" & PanList.Children.Count & ")"
+        ElseIf PanList.Children.Count > 0 Then
+            PanListBack.Title = "搜索结果 (" & PanList.Children.Count & ")"
         Else
-            Card.Title = Name & " 列表无搜索结果"
+            PanListBack.Title = "无搜索结果"
         End If
-        Dim IsContainItem As Boolean = Mods.Any()
-        List.Visibility = If(IsContainItem, Visibility.Visible, Visibility.Collapsed)
-        'CanSwap 设置无效果,不知道为什么
-        Card.CanSwap = IsContainItem
-        Card.IsSwaped = Not IsContainItem
+        PanList.Visibility = If(PanList.Children.Count > 0, Visibility.Visible, Visibility.Collapsed)
     End Sub
 
 #End Region
@@ -208,7 +228,7 @@
     ''' 全选。
     ''' </summary>
     Private Sub BtnManageSelectAll_Click(sender As Object, e As MouseButtonEventArgs) Handles BtnManageSelectAll.Click
-        If SelectedMods.Count < PanDefaultList.Children.Count + PanUnavaliableList.Children.Count + PanUpdateList.Children.Count + PanDisabledList.Children.Count Then
+        If SelectedMods.Count < PanList.Children.Count Then
             ChangeAllSelected(True)
         Else
             ChangeAllSelected(False)
@@ -317,23 +337,14 @@
     Private Sub ChangeAllSelected(Value As Boolean)
         AniControlEnabled += 1
         SelectedMods.Clear()
-        ChangeTargetListSeleted(PanUpdateListBack, PanUpdateList, Value)
-        ChangeTargetListSeleted(PanDisabledListBack, PanDisabledList, Value)
-        ChangeTargetListSeleted(PanUnavaliableListBack, PanUnavaliableList, Value)
-        ChangeTargetListSeleted(PanDefaultListBack, PanDefaultList, Value)
-        AniControlEnabled -= 1
-        '更新下边栏 UI
-        RefreshBottomBar()
-    End Sub
-
-    Private Sub ChangeTargetListSeleted(Card As MyCard, List As StackPanel, Value As Boolean)
-        If Value.Equals(True) Then Card.IsSwaped = False
-        For Each Item As MyLocalModItem In List.Children
+        For Each Item As MyLocalModItem In PanList.Children
             Item.Checked = Value
             If Value Then SelectedMods.Add(Item.Entry.RawFileName)
         Next
+        AniControlEnabled -= 1
+        '更新下边栏 UI
+        RefreshBottomBar()
     End Sub
-
     Private Sub UnselectedAllWithAnimation() Handles Load.StateChanged, Me.PageExit
         Dim CacheAniControlEnabled = AniControlEnabled
         AniControlEnabled = 0
@@ -344,6 +355,17 @@
         If My.Computer.Keyboard.CtrlKeyDown AndAlso e.Key = Key.A Then ChangeAllSelected(True)
     End Sub
 
+    Private ViewModType As String = "All"
+
+    Private Sub ChangeViewType(sender As MyTextButton, e As EventArgs) Handles BtnTypeAll.Click, BtnTypeCanUpdate.Click, BtnTypeDisabled.Click, BtnTypeEnabled.Click, BtnTypeError.Click
+        ViewModType = sender.Tag
+        If IsSearching Then
+            SearchRun()
+        Else
+            RefreshResult(McModLoader.Output)
+        End If
+    End Sub
+
 #End Region
 
 #Region "下边栏"
@@ -353,6 +375,7 @@
         EDMods(McModLoader.Output.Where(Function(m) SelectedMods.Contains(m.RawFileName)),
                Not sender.Equals(BtnSelectDisable))
         ChangeAllSelected(False)
+        RefreshResult(McModLoader.Output)
     End Sub
     Private Sub EDMods(ModList As IEnumerable(Of McMod), IsEnable As Boolean)
         Dim IsSuccessful As Boolean = True
@@ -402,27 +425,10 @@
             '更改 UI 中的列表
             Dim NewItem As MyLocalModItem = McModListItem(NewModEntity)
             ModItems(ModEntity.RawFileName) = NewItem
-            If ModEntity.CanUpdate Then
-                Dim IndexOfUi As Integer = PanUpdateList.Children.IndexOf(PanUpdateList.Children.OfType(Of MyLocalModItem).FirstOrDefault(Function(i) i.Entry Is ModEntity))
-                If IndexOfUi = -1 Then Continue For '因为未知原因 Mod 的状态已经切换完了
-                PanUpdateList.Children.RemoveAt(IndexOfUi)
-                PanUpdateList.Children.Insert(IndexOfUi, NewItem)
-            ElseIf ModEntity.State.Equals(McMod.McModState.Fine) Then '启用 → 禁用
-                Dim IndexOfUi As Integer = PanDefaultList.Children.IndexOf(PanDefaultList.Children.OfType(Of MyLocalModItem).FirstOrDefault(Function(i) i.Entry Is ModEntity))
-                If IndexOfUi = -1 Then Continue For '因为未知原因 Mod 的状态已经切换完了
-                PanDefaultList.Children.RemoveAt(IndexOfUi)
-                PanDisabledList.Children.Add(NewItem)
-            ElseIf ModEntity.State.Equals(McMod.McModState.Disabled) Then '禁用 → 启用
-                Dim IndexOfUi As Integer = PanDisabledList.Children.IndexOf(PanDisabledList.Children.OfType(Of MyLocalModItem).FirstOrDefault(Function(i) i.Entry Is ModEntity))
-                If IndexOfUi = -1 Then Continue For '因为未知原因 Mod 的状态已经切换完了
-                PanDisabledList.Children.RemoveAt(IndexOfUi)
-                PanDefaultList.Children.Add(NewItem)
-            Else
-                Dim IndexOfUi As Integer = PanUnavaliableList.Children.IndexOf(PanUnavaliableList.Children.OfType(Of MyLocalModItem).FirstOrDefault(Function(i) i.Entry Is ModEntity))
-                If IndexOfUi = -1 Then Continue For '因为未知原因 Mod 的状态已经切换完了
-                PanUnavaliableList.Children.RemoveAt(IndexOfUi)
-                PanUnavaliableList.Children.Insert(IndexOfUi, NewItem)
-            End If
+            Dim IndexOfUi As Integer = PanList.Children.IndexOf(PanList.Children.OfType(Of MyLocalModItem).FirstOrDefault(Function(i) i.Entry Is ModEntity))
+            If IndexOfUi = -1 Then Continue For '因为未知原因 Mod 的状态已经切换完了
+            PanList.Children.RemoveAt(IndexOfUi)
+            PanList.Children.Insert(IndexOfUi, NewItem)
         Next
         RefreshTitle() '改变数量显示
         If Not IsSuccessful Then
@@ -441,7 +447,6 @@
     ''' 记录正在进行 Mod 更新的 mods 文件夹路径。
     ''' </summary>
     Public Shared UpdatingVersions As New List(Of String)
-
     Public Sub UpdateMods(ModList As IEnumerable(Of McMod))
         '更新前警告
         If Not Setup.Get("HintUpdateMod") Then
@@ -592,20 +597,14 @@
                 '更改 Loader 和 UI 中的列表
                 McModLoader.Output.Remove(ModEntity)
                 ModItems.Remove(ModEntity.RawFileName)
-                Dim IndexOfUi As Integer = PanDefaultList.Children.IndexOf(PanDefaultList.Children.OfType(Of MyLocalModItem).FirstOrDefault(Function(i) i.Entry.Equals(ModEntity)))
-                If IndexOfUi >= 0 Then PanDefaultList.Children.RemoveAt(IndexOfUi)
-                IndexOfUi = PanUpdateList.Children.IndexOf(PanUpdateList.Children.OfType(Of MyLocalModItem).FirstOrDefault(Function(i) i.Entry.Equals(ModEntity)))
-                If IndexOfUi >= 0 Then PanUpdateList.Children.RemoveAt(IndexOfUi)
-                IndexOfUi = PanDisabledList.Children.IndexOf(PanDisabledList.Children.OfType(Of MyLocalModItem).FirstOrDefault(Function(i) i.Entry.Equals(ModEntity)))
-                If IndexOfUi >= 0 Then PanDisabledList.Children.RemoveAt(IndexOfUi)
-                IndexOfUi = PanUnavaliableList.Children.IndexOf(PanUnavaliableList.Children.OfType(Of MyLocalModItem).FirstOrDefault(Function(i) i.Entry.Equals(ModEntity)))
-                If IndexOfUi >= 0 Then PanUnavaliableList.Children.RemoveAt(IndexOfUi)
+                Dim IndexOfUi As Integer = PanList.Children.IndexOf(PanList.Children.OfType(Of MyLocalModItem).FirstOrDefault(Function(i) i.Entry.Equals(ModEntity)))
+                If IndexOfUi >= 0 Then PanList.Children.RemoveAt(IndexOfUi)
             Next
             RefreshTitle()
             If Not IsSuccessful Then
                 Hint("由于文件被占用,Mod 删除失败,请尝试关闭正在运行的游戏后再试!", HintType.Critical)
                 RefreshList(True)
-            ElseIf PanDefaultList.Children.Count + PanUpdateList.Children.Count + PanDisabledList.Children.Count + PanUnavaliableList.Children.Count = 0 Then
+            ElseIf PanList.Children.Count = 0 Then
                 RefreshList(True) '删除了全部文件
             Else
                 RefreshBottomBar()