PageDownloadLeft.xaml.vb 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. Public Class PageDownloadLeft
  2. Implements IRefreshable
  3. #Region "页面切换"
  4. ''' <summary>
  5. ''' 当前页面的编号。
  6. ''' </summary>
  7. Public PageID As FormMain.PageSubType = FormMain.PageSubType.DownloadInstall
  8. '隐藏 MC 下载
  9. Public Sub New()
  10. InitializeComponent()
  11. If Not RestrictMcDownload Then Return
  12. ItemInstall.Visibility = Visibility.Collapsed
  13. LabResource.Visibility = Visibility.Collapsed
  14. PageID = FormMain.PageSubType.DownloadMod
  15. ItemMod.Checked = True
  16. End Sub
  17. ''' <summary>
  18. ''' 勾选事件改变页面。
  19. ''' </summary>
  20. Private Sub PageCheck(sender As FrameworkElement, e As RouteEventArgs) Handles ItemInstall.Check, ItemMod.Check, ItemPack.Check, ItemResourcePack.Check, ItemShader.Check, ItemDataPack.Check
  21. '尚未初始化控件属性时,sender.Tag 为 Nothing,会导致切换到页面 0
  22. '若使用 IsLoaded,则会导致模拟点击不被执行(模拟点击切换页面时,控件的 IsLoaded 为 False)
  23. If sender.Tag IsNot Nothing Then PageChange(Val(sender.Tag))
  24. End Sub
  25. Public Function PageGet(Optional ID As FormMain.PageSubType = -1)
  26. If ID = -1 Then ID = PageID
  27. Select Case ID
  28. Case FormMain.PageSubType.DownloadInstall
  29. If FrmDownloadInstall Is Nothing Then FrmDownloadInstall = New PageDownloadInstall
  30. Return FrmDownloadInstall
  31. Case FormMain.PageSubType.DownloadMod
  32. If FrmDownloadMod Is Nothing Then FrmDownloadMod = New PageDownloadMod
  33. Return FrmDownloadMod
  34. Case FormMain.PageSubType.DownloadPack
  35. If FrmDownloadPack Is Nothing Then FrmDownloadPack = New PageDownloadPack
  36. Return FrmDownloadPack
  37. Case FormMain.PageSubType.DownloadResourcePack
  38. If FrmDownloadResourcePack Is Nothing Then FrmDownloadResourcePack = New PageDownloadResourcePack
  39. Return FrmDownloadResourcePack
  40. Case FormMain.PageSubType.DownloadShader
  41. If FrmDownloadShader Is Nothing Then FrmDownloadShader = New PageDownloadShader
  42. Return FrmDownloadShader
  43. Case FormMain.PageSubType.DownloadDataPack
  44. If FrmDownloadDataPack Is Nothing Then FrmDownloadDataPack = New PageDownloadDataPack
  45. Return FrmDownloadDataPack
  46. Case Else
  47. Throw New Exception("未知的下载子页面种类:" & ID)
  48. End Select
  49. End Function
  50. ''' <summary>
  51. ''' 切换现有页面。
  52. ''' </summary>
  53. Public Sub PageChange(ID As FormMain.PageSubType)
  54. If PageID = ID Then Return
  55. AniControlEnabled += 1
  56. Try
  57. PageChangeRun(PageGet(ID))
  58. PageID = ID
  59. Catch ex As Exception
  60. Logger.Error(ex, $"切换分页面失败(ID {ID})")
  61. Finally
  62. AniControlEnabled -= 1
  63. End Try
  64. End Sub
  65. Private Shared Sub PageChangeRun(Target As MyPageRight)
  66. AniStop("FrmMain PageChangeRight") '停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter
  67. If Target.Parent IsNot Nothing Then Target.SetValue(ContentPresenter.ContentProperty, Nothing)
  68. FrmMain.PageRight = Target
  69. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnExit()
  70. AniStart({
  71. AaCode(
  72. Sub()
  73. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnForceExit()
  74. FrmMain.PanMainRight.Child = FrmMain.PageRight
  75. FrmMain.PageRight.Opacity = 0
  76. End Sub, 130),
  77. AaCode(
  78. Sub()
  79. '延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
  80. FrmMain.PageRight.Opacity = 1
  81. FrmMain.PageRight.PageOnEnter()
  82. End Sub, 30, True)
  83. }, "PageLeft PageChange")
  84. End Sub
  85. #End Region
  86. '强制刷新
  87. Public Sub Refresh_Click(sender As Object, e As EventArgs) '由边栏按钮匿名调用
  88. Refresh(Val(sender.Tag))
  89. End Sub
  90. Public Sub Refresh() Implements IRefreshable.Refresh
  91. Refresh(FrmMain.PageCurrentSub)
  92. End Sub
  93. Public Sub Refresh(SubType As FormMain.PageSubType)
  94. ResourceProject.Cache.Clear()
  95. ResourceVersion.ProjectFilesCache.Clear()
  96. Select Case SubType
  97. Case FormMain.PageSubType.DownloadInstall
  98. DlClientListLoader.Start(IsForceRestart:=True)
  99. DlOptiFineListLoader.Start(IsForceRestart:=True)
  100. DlForgeListLoader.Start(IsForceRestart:=True)
  101. DlNeoForgeListLoader.Start(IsForceRestart:=True)
  102. DlLiteLoaderListLoader.Start(IsForceRestart:=True)
  103. DlFabricListLoader.Start(IsForceRestart:=True)
  104. DlFabricApiLoader.Start(IsForceRestart:=True)
  105. DlOptiFabricLoader.Start(IsForceRestart:=True)
  106. ItemInstall.Checked = True
  107. Case FormMain.PageSubType.DownloadMod
  108. If FrmDownloadMod IsNot Nothing Then
  109. FrmDownloadMod.Content.Storage = New ResourceSearcher.SearchResult
  110. FrmDownloadMod.Content.Page = 0
  111. FrmDownloadMod.PageLoaderRestart()
  112. End If
  113. ItemMod.Checked = True
  114. Case FormMain.PageSubType.DownloadPack
  115. If FrmDownloadPack IsNot Nothing Then
  116. FrmDownloadPack.Content.Storage = New ResourceSearcher.SearchResult
  117. FrmDownloadPack.Content.Page = 0
  118. FrmDownloadPack.PageLoaderRestart()
  119. End If
  120. ItemPack.Checked = True
  121. Case FormMain.PageSubType.DownloadResourcePack
  122. If FrmDownloadResourcePack IsNot Nothing Then
  123. FrmDownloadResourcePack.Content.Storage = New ResourceSearcher.SearchResult
  124. FrmDownloadResourcePack.Content.Page = 0
  125. FrmDownloadResourcePack.PageLoaderRestart()
  126. End If
  127. ItemResourcePack.Checked = True
  128. Case FormMain.PageSubType.DownloadShader
  129. If FrmDownloadShader IsNot Nothing Then
  130. FrmDownloadShader.Content.Storage = New ResourceSearcher.SearchResult
  131. FrmDownloadShader.Content.Page = 0
  132. FrmDownloadShader.PageLoaderRestart()
  133. End If
  134. ItemShader.Checked = True
  135. Case FormMain.PageSubType.DownloadDataPack
  136. If FrmDownloadDataPack IsNot Nothing Then
  137. FrmDownloadDataPack.Content.Storage = New ResourceSearcher.SearchResult
  138. FrmDownloadDataPack.Content.Page = 0
  139. FrmDownloadDataPack.PageLoaderRestart()
  140. End If
  141. ItemDataPack.Checked = True
  142. End Select
  143. Hint("正在刷新……", Log:=False)
  144. End Sub
  145. '点击返回
  146. Private Sub ItemInstall_Click(sender As Object, e As MouseButtonEventArgs) Handles ItemInstall.Click
  147. If Not ItemInstall.Checked Then Return
  148. FrmDownloadInstall.ExitSelectPage()
  149. End Sub
  150. End Class