PageDownloadLeft.xaml.vb 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. Public Class PageDownloadLeft
  2. #Region "页面切换"
  3. ''' <summary>
  4. ''' 当前页面的编号。
  5. ''' </summary>
  6. Public PageID As FormMain.PageSubType = FormMain.PageSubType.DownloadInstall
  7. ''' <summary>
  8. ''' 勾选事件改变页面。
  9. ''' </summary>
  10. Private Sub PageCheck(sender As MyListItem, e As RouteEventArgs) Handles ItemInstall.Check, ItemClient.Check, ItemOptiFine.Check, ItemForge.Check, ItemNeoForge.Check, ItemLiteLoader.Check, ItemMod.Check, ItemFabric.Check, ItemPack.Check, ItemShader.Check
  11. '尚未初始化控件属性时,sender.Tag 为 Nothing,会导致切换到页面 0
  12. '若使用 IsLoaded,则会导致模拟点击不被执行(模拟点击切换页面时,控件的 IsLoaded 为 False)
  13. If sender.Tag IsNot Nothing Then PageChange(Val(sender.Tag))
  14. End Sub
  15. Public Function PageGet(Optional ID As FormMain.PageSubType = -1)
  16. If ID = -1 Then ID = PageID
  17. Select Case ID
  18. Case FormMain.PageSubType.DownloadInstall
  19. If FrmDownloadInstall Is Nothing Then FrmDownloadInstall = New PageDownloadInstall
  20. Return FrmDownloadInstall
  21. Case FormMain.PageSubType.DownloadClient
  22. If FrmDownloadClient Is Nothing Then FrmDownloadClient = New PageDownloadClient
  23. Return FrmDownloadClient
  24. Case FormMain.PageSubType.DownloadOptiFine
  25. If FrmDownloadOptiFine Is Nothing Then FrmDownloadOptiFine = New PageDownloadOptiFine
  26. Return FrmDownloadOptiFine
  27. Case FormMain.PageSubType.DownloadForge
  28. If FrmDownloadForge Is Nothing Then FrmDownloadForge = New PageDownloadForge
  29. Return FrmDownloadForge
  30. Case FormMain.PageSubType.DownloadNeoForge
  31. If FrmDownloadNeoForge Is Nothing Then FrmDownloadNeoForge = New PageDownloadNeoForge
  32. Return FrmDownloadNeoForge
  33. Case FormMain.PageSubType.DownloadLiteLoader
  34. If FrmDownloadLiteLoader Is Nothing Then FrmDownloadLiteLoader = New PageDownloadLiteLoader
  35. Return FrmDownloadLiteLoader
  36. Case FormMain.PageSubType.DownloadFabric
  37. If FrmDownloadFabric Is Nothing Then FrmDownloadFabric = New PageDownloadFabric
  38. Return FrmDownloadFabric
  39. Case FormMain.PageSubType.DownloadMod
  40. If FrmDownloadMod Is Nothing Then FrmDownloadMod = New PageDownloadMod
  41. Return FrmDownloadMod
  42. Case FormMain.PageSubType.DownloadPack
  43. If FrmDownloadPack Is Nothing Then FrmDownloadPack = New PageDownloadPack
  44. Return FrmDownloadPack
  45. Case FormMain.PageSubType.DownloadShader
  46. If FrmDownloadShader Is Nothing Then FrmDownloadShader = New PageDownloadShader
  47. Return FrmDownloadShader
  48. Case Else
  49. Throw New Exception("未知的下载子页面种类:" & ID)
  50. End Select
  51. End Function
  52. ''' <summary>
  53. ''' 切换现有页面。
  54. ''' </summary>
  55. Public Sub PageChange(ID As FormMain.PageSubType)
  56. If PageID = ID Then Exit Sub
  57. AniControlEnabled += 1
  58. Try
  59. PageChangeRun(PageGet(ID))
  60. PageID = ID
  61. Catch ex As Exception
  62. Log(ex, "切换设置分页面失败(ID " & ID & ")", LogLevel.Feedback)
  63. Finally
  64. AniControlEnabled -= 1
  65. End Try
  66. End Sub
  67. Private Shared Sub PageChangeRun(Target As MyPageRight)
  68. AniStop("FrmMain PageChangeRight") '停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter
  69. If Target.Parent IsNot Nothing Then Target.SetValue(ContentPresenter.ContentProperty, Nothing)
  70. FrmMain.PageRight = Target
  71. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnExit()
  72. AniStart({
  73. AaCode(
  74. Sub()
  75. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnForceExit()
  76. FrmMain.PanMainRight.Child = FrmMain.PageRight
  77. FrmMain.PageRight.Opacity = 0
  78. End Sub, 130),
  79. AaCode(
  80. Sub()
  81. '延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
  82. FrmMain.PageRight.Opacity = 1
  83. FrmMain.PageRight.PageOnEnter()
  84. End Sub, 30, True)
  85. }, "PageLeft PageChange")
  86. End Sub
  87. #End Region
  88. '强制刷新
  89. Public Sub Refresh(sender As Object, e As EventArgs) '由边栏按钮匿名调用
  90. Select Case Val(sender.Tag)
  91. Case FormMain.PageSubType.DownloadInstall
  92. DlClientListLoader.Start(IsForceRestart:=True)
  93. DlOptiFineListLoader.Start(IsForceRestart:=True)
  94. DlForgeListLoader.Start(IsForceRestart:=True)
  95. DlNeoForgeListLoader.Start(IsForceRestart:=True)
  96. DlLiteLoaderListLoader.Start(IsForceRestart:=True)
  97. DlFabricListLoader.Start(IsForceRestart:=True)
  98. DlFabricApiLoader.Start(IsForceRestart:=True)
  99. DlOptiFabricLoader.Start(IsForceRestart:=True)
  100. ItemInstall.Checked = True
  101. Case FormMain.PageSubType.DownloadMod
  102. PageDownloadMod.Storage = New CompProjectStorage
  103. PageDownloadMod.Page = 0
  104. CompProjectCache.Clear()
  105. If FrmDownloadMod IsNot Nothing Then FrmDownloadMod.PageLoaderRestart()
  106. ItemMod.Checked = True
  107. Case FormMain.PageSubType.DownloadPack
  108. PageDownloadPack.Storage = New CompProjectStorage
  109. PageDownloadPack.Page = 0
  110. CompProjectCache.Clear()
  111. If FrmDownloadPack IsNot Nothing Then FrmDownloadPack.PageLoaderRestart()
  112. ItemPack.Checked = True
  113. Case FormMain.PageSubType.DownloadShader
  114. PageDownloadShader.Storage = New CompProjectStorage
  115. PageDownloadShader.Page = 0
  116. CompProjectCache.Clear()
  117. If FrmDownloadShader IsNot Nothing Then FrmDownloadShader.PageLoaderRestart()
  118. ItemShader.Checked = True
  119. Case FormMain.PageSubType.DownloadClient
  120. DlClientListLoader.Start(IsForceRestart:=True)
  121. ItemClient.Checked = True
  122. Case FormMain.PageSubType.DownloadOptiFine
  123. DlOptiFineListLoader.Start(IsForceRestart:=True)
  124. ItemOptiFine.Checked = True
  125. Case FormMain.PageSubType.DownloadForge
  126. DlForgeListLoader.Start(IsForceRestart:=True)
  127. ItemForge.Checked = True
  128. Case FormMain.PageSubType.DownloadNeoForge
  129. DlNeoForgeListLoader.Start(IsForceRestart:=True)
  130. ItemNeoForge.Checked = True
  131. Case FormMain.PageSubType.DownloadLiteLoader
  132. DlLiteLoaderListLoader.Start(IsForceRestart:=True)
  133. ItemLiteLoader.Checked = True
  134. Case FormMain.PageSubType.DownloadFabric
  135. DlFabricListLoader.Start(IsForceRestart:=True)
  136. ItemFabric.Checked = True
  137. End Select
  138. Hint("正在刷新……", Log:=False)
  139. End Sub
  140. '点击返回
  141. Private Sub ItemInstall_Click(sender As Object, e As MouseButtonEventArgs) Handles ItemInstall.Click
  142. If Not ItemInstall.Checked Then Exit Sub
  143. FrmDownloadInstall.ExitSelectPage()
  144. End Sub
  145. '展开手动安装
  146. Private Sub ItemHand_Click(sender As Object, e As RouteEventArgs) Handles ItemHand.Changed
  147. If ItemHand.Checked = False Then Exit Sub
  148. e.Handled = True
  149. AniControlEnabled += 1
  150. If Not Setup.Get("HintHandInstall") Then
  151. Setup.Set("HintHandInstall", True)
  152. If MyMsgBox("手动安装包功能提供了 OptiFine、Forge 等组件的 .jar 安装文件下载,但无法自动安装。" & vbCrLf &
  153. "在自动安装页面先选择 MC 版本,然后就可以选择 OptiFine、Forge 等组件,让 PCL 自动进行安装了。", "自动安装提示", "返回自动安装", "继续下载手动安装包") = 1 Then
  154. FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.Download}, FormMain.PageSubType.DownloadInstall)
  155. AniControlEnabled -= 1
  156. Exit Sub
  157. End If
  158. End If
  159. ItemHand.Visibility = Visibility.Collapsed
  160. LabGame.Visibility = Visibility.Collapsed
  161. LabHand.Visibility = Visibility.Visible
  162. ItemClient.Visibility = Visibility.Visible
  163. ItemOptiFine.Visibility = Visibility.Visible
  164. ItemFabric.Visibility = Visibility.Visible
  165. ItemForge.Visibility = Visibility.Visible
  166. ItemNeoForge.Visibility = Visibility.Visible
  167. ItemLiteLoader.Visibility = Visibility.Visible
  168. RunInThread(
  169. Sub()
  170. Thread.Sleep(20)
  171. RunInUiWait(Sub() ItemClient.SetChecked(True, True, True))
  172. AniControlEnabled -= 1
  173. End Sub)
  174. End Sub
  175. '折叠手动安装
  176. Private Sub LabHand_Click(sender As Object, e As MouseButtonEventArgs) Handles LabHand.MouseLeftButtonUp
  177. e.Handled = True
  178. AniControlEnabled += 1
  179. ItemHand.Visibility = Visibility.Visible
  180. LabGame.Visibility = Visibility.Visible
  181. LabHand.Visibility = Visibility.Collapsed
  182. ItemClient.Visibility = Visibility.Collapsed
  183. ItemOptiFine.Visibility = Visibility.Collapsed
  184. ItemNeoForge.Visibility = Visibility.Collapsed
  185. ItemFabric.Visibility = Visibility.Collapsed
  186. ItemForge.Visibility = Visibility.Collapsed
  187. ItemLiteLoader.Visibility = Visibility.Collapsed
  188. RunInThread(
  189. Sub()
  190. Thread.Sleep(20)
  191. RunInUiWait(Sub() ItemInstall.SetChecked(True, True, True))
  192. AniControlEnabled -= 1
  193. End Sub)
  194. End Sub
  195. End Class