PageDownloadLeft.xaml.vb 12 KB

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