💥 🚸 显示部分选中的文件夹
This commit is contained in:
@@ -115,7 +115,7 @@
|
||||
</local:MyCard>
|
||||
<local:MyCard x:Name="CardMore" Title="高级选项" Margin="0,0,0,15" CanSwap="True" IsSwaped="True">
|
||||
<StackPanel x:Name="PanFileList" Margin="25,40,23,15">
|
||||
<TextBlock Margin="0,1,0,10" Text="你可以在此勾选需要包含进整合包的文件或文件夹。" TextWrapping="Wrap" />
|
||||
<TextBlock Margin="0,1,0,10" Text="你可以在此勾选其他需要包含进整合包的文件或文件夹。
请注意:部分冗余的文件或文件夹、必须包含在整合包的文件或文件夹不被展示在列表中。" TextWrapping="Wrap" />
|
||||
<local:MyListItem Type="CheckBox" Title="游戏存档" Height="35" Logo="M889.018182 418.909091H884.363636V316.509091a93.090909 93.090909 0 0 0-99.607272-89.832727h-302.545455l-93.090909-76.334546A46.545455 46.545455 0 0 0 358.865455 139.636364H146.152727A93.090909 93.090909 0 0 0 46.545455 229.469091V837.818182a46.545455 46.545455 0 0 0 46.545454 46.545454 46.545455 46.545455 0 0 0 16.756364-3.258181 109.381818 109.381818 0 0 0 25.134545 3.258181h586.472727a85.178182 85.178182 0 0 0 87.04-63.301818l163.374546-302.545454a46.545455 46.545455 0 0 0 5.585454-21.876364A82.385455 82.385455 0 0 0 889.018182 418.909091z m-744.727273-186.181818h198.283636l93.09091 76.334545a46.545455 46.545455 0 0 0 29.323636 10.705455h319.301818a12.101818 12.101818 0 0 1 6.516364 0V418.909091H302.545455a85.178182 85.178182 0 0 0-87.04 63.301818L139.636364 622.778182V232.727273a19.549091 19.549091 0 0 1 6.516363 0z m578.094546 552.029091a27.461818 27.461818 0 0 0-2.792728 6.516363H154.530909l147.083636-272.290909a27.461818 27.461818 0 0 0 2.792728-6.981818h565.061818z" />
|
||||
<local:MyListItem Type="CheckBox" Title="游戏存档" Height="35" Logo="M586.9 436h-74.7V62.4H177.1c-20.6 0-37.4 16.7-37.4 37.4v821.9c0 20.6 16.7 37.4 37.4 37.4h672.5c20.6 0 37.4-16.7 37.4-37.4V436H586.9z m0-74.7h297.8c-7.3-57.4-31.2-70.9-58.4-98.1l-66.5-66.5-0.1-0.1 0.1 0.1-0.9-0.9-22.8-22.8-0.9-0.9 0.1 0.1-0.1-0.1-66.5-66.5c-21.8-21.8-38.8-36.5-81.7-41.4l-0.1 297.1z" />
|
||||
<local:MyListItem Type="CheckBox" Title="游戏存档" Height="35" Logo="M757.792745 435.407215L419.597482 96.904967c-40.010393-40.010393-104.886579-40.010393-144.896972 0-40.010393 40.010393-40.010393 104.988908 0 144.9993L540.344959 507.855701 274.70051 773.807135c-40.010393 40.112721-40.010393 104.988908 0 144.9993 40.010393 40.010393 104.886579 40.010393 144.896972 0l338.092935-338.39992c40.112721-40.010393 40.112721-104.988908 0.102328-144.9993z" />
|
||||
|
||||
@@ -77,7 +77,12 @@
|
||||
listItem.Height = 35
|
||||
listItem.Logo = Logo.IconButtonOpen
|
||||
listItem.Tag = d & "\"
|
||||
If IsSelected(NewPath & d & "\") Then listItem.Checked = True
|
||||
Select Case IsSelected(NewPath & d & "\")
|
||||
Case 1
|
||||
listItem.Half = True
|
||||
Case 2
|
||||
listItem.Checked = True
|
||||
End Select
|
||||
AddHandler listItem.Click, AddressOf ListItem_Click
|
||||
PanFileList.Children.Add(listItem)
|
||||
fileCount += 1
|
||||
@@ -97,7 +102,7 @@
|
||||
listItem.Type = MyListItem.CheckType.CheckBox
|
||||
listItem.Height = 35
|
||||
listItem.Tag = f
|
||||
If IsSelected(NewPath & f) Then listItem.Checked = True
|
||||
listItem.Checked = (IsSelected(NewPath & f) = 2)
|
||||
AddHandler listItem.Click, AddressOf ListItem_Click
|
||||
PanFileList.Children.Add(listItem)
|
||||
fileCount += 1
|
||||
@@ -141,18 +146,42 @@
|
||||
If IsAdd Then Selected.Add(f) Else Selected.Remove(f)
|
||||
Next
|
||||
End If
|
||||
Selected = Selected.Distinct().ToList()
|
||||
End Sub
|
||||
Private Function IsSelected(TargetPath As String, Optional AllowEmpty As Boolean = False) As Boolean
|
||||
''' <summary>
|
||||
''' 获取 TargetPath 是否选中。
|
||||
''' </summary>
|
||||
''' <returns>全部未选中为 0,部分选中为 1,全部选中为 2。</returns>
|
||||
Private Function IsSelected(TargetPath As String, Optional AllowEmpty As Boolean = False) As Integer
|
||||
If File.Exists(TargetPath) Then
|
||||
Return Selected.Contains(TargetPath)
|
||||
Return If(Selected.Contains(TargetPath), 2, 0)
|
||||
End If
|
||||
If Directory.Exists(TargetPath) Then
|
||||
Dim di As New DirectoryInfo(TargetPath)
|
||||
If (Not AllowEmpty) AndAlso di.GetDirectories.Length + di.GetFiles.Length = 0 Then Return False
|
||||
Return Directory.EnumerateDirectories(TargetPath).All(Function(s) IsSelected(s, True)) AndAlso
|
||||
Directory.EnumerateFiles(TargetPath).All(Function(s) Selected.Contains(s))
|
||||
If (Not AllowEmpty) AndAlso di.GetDirectories.Length + di.GetFiles.Length = 0 Then Return 0
|
||||
'如果有一个文件不在列表,则 hasFalse = True
|
||||
Dim hasFalse As Boolean = False
|
||||
'如果有一个文件在列表,则 hasTrue = True
|
||||
Dim hasTrue As Boolean = False
|
||||
For Each d In Directory.EnumerateDirectories(TargetPath)
|
||||
Select Case IsSelected(d, True)
|
||||
Case 0
|
||||
hasFalse = True
|
||||
Case 1
|
||||
Return 1
|
||||
Case 2
|
||||
hasTrue = True
|
||||
End Select
|
||||
If hasTrue AndAlso hasFalse Then Return 1 '如果有文件在、有文件不在列表中,可以断定部分选中
|
||||
Next
|
||||
For Each f In Directory.EnumerateFiles(TargetPath)
|
||||
If Selected.Contains(f) Then hasTrue = True Else hasFalse = True
|
||||
If hasTrue AndAlso hasFalse Then Return 1 '如果有文件在、有文件不在列表中,可以断定部分选中
|
||||
Next
|
||||
If hasFalse AndAlso Not hasTrue Then Return 0
|
||||
If hasTrue AndAlso Not hasFalse Then Return 2
|
||||
End If
|
||||
Return False
|
||||
Return 0
|
||||
End Function
|
||||
Private Sub ListItem_Click(sender As MyListItem, e As Object)
|
||||
If sender.Tag = ".." Then '回到上一级目录
|
||||
@@ -191,7 +220,7 @@
|
||||
Private Sub PanFileList_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs) Handles PanFileList.MouseLeftButtonUp
|
||||
For Each c In PanCommonFiles.Children
|
||||
If TypeOf c Is MyCheckBox Then
|
||||
c.Checked = IsSelected(PageVersionLeft.Version.Path & c.Tag)
|
||||
c.Checked = (IsSelected(PageVersionLeft.Version.Path & c.Tag) = 2)
|
||||
End If
|
||||
Next
|
||||
End Sub
|
||||
@@ -263,14 +292,14 @@
|
||||
If(CheckIncludePCL.Checked, "整合包文件(*.zip)|*.zip", "Modrinth 整合包(*.mrpack)|*.mrpack"))
|
||||
If String.IsNullOrEmpty(savePath) Then Exit Sub
|
||||
|
||||
'获取需要包含的文件夹
|
||||
Dim contains As New List(Of String)
|
||||
'获取需要包含的文件
|
||||
Dim contains As List(Of String) = Selected
|
||||
For Each c In PanCommonFiles.Children
|
||||
If TypeOf c IsNot MyCheckBox Then Continue For
|
||||
If String.IsNullOrEmpty(c.Tag) Then Continue For
|
||||
contains.Add(c.Tag)
|
||||
contains.Add(PageVersionLeft.Version.Path & c.Tag)
|
||||
Next
|
||||
ModpackExport(New ExportOptions(PageVersionLeft.Version, savePath, CheckIncludePCL.Checked, Selected.ToArray,
|
||||
ModpackExport(New ExportOptions(PageVersionLeft.Version, savePath, CheckIncludePCL.Checked, contains.Distinct.ToArray,
|
||||
PCLSetupGlobal:=CheckIncludeSetup.Checked, Name:=TbExportName.Text, VerID:=TbExportVersion.Text))
|
||||
End Sub
|
||||
|
||||
|
||||
Reference in New Issue
Block a user