PageDownloadLeft.xaml.vb 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  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, ItemShader.Check, ItemResourcePack.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.DownloadShader
  47. If FrmDownloadShader Is Nothing Then FrmDownloadShader = New PageDownloadShader
  48. Return FrmDownloadShader
  49. Case FormMain.PageSubType.DownloadResourcePack
  50. If FrmDownloadResourcePack Is Nothing Then FrmDownloadResourcePack = New PageDownloadResourcePack
  51. Return FrmDownloadResourcePack
  52. Case Else
  53. Throw New Exception("未知的下载子页面种类:" & ID)
  54. End Select
  55. End Function
  56. ''' <summary>
  57. ''' 切换现有页面。
  58. ''' </summary>
  59. Public Sub PageChange(ID As FormMain.PageSubType)
  60. If PageID = ID Then Exit Sub
  61. AniControlEnabled += 1
  62. Try
  63. PageChangeRun(PageGet(ID))
  64. PageID = ID
  65. Catch ex As Exception
  66. Log(ex, "切换分页面失败(ID " & ID & ")", LogLevel.Feedback)
  67. Finally
  68. AniControlEnabled -= 1
  69. End Try
  70. End Sub
  71. Private Shared Sub PageChangeRun(Target As MyPageRight)
  72. AniStop("FrmMain PageChangeRight") '停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter
  73. If Target.Parent IsNot Nothing Then Target.SetValue(ContentPresenter.ContentProperty, Nothing)
  74. FrmMain.PageRight = Target
  75. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnExit()
  76. AniStart({
  77. AaCode(
  78. Sub()
  79. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnForceExit()
  80. FrmMain.PanMainRight.Child = FrmMain.PageRight
  81. FrmMain.PageRight.Opacity = 0
  82. End Sub, 130),
  83. AaCode(
  84. Sub()
  85. '延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
  86. FrmMain.PageRight.Opacity = 1
  87. FrmMain.PageRight.PageOnEnter()
  88. End Sub, 30, True)
  89. }, "PageLeft PageChange")
  90. End Sub
  91. #End Region
  92. '强制刷新
  93. Public Sub Refresh(sender As Object, e As EventArgs) '由边栏按钮匿名调用
  94. Refresh(Val(sender.Tag))
  95. End Sub
  96. Public Sub Refresh() Implements IRefreshable.Refresh
  97. Refresh(FrmMain.PageCurrentSub)
  98. End Sub
  99. Public Sub Refresh(SubType As FormMain.PageSubType)
  100. Select Case SubType
  101. Case FormMain.PageSubType.DownloadInstall
  102. DlClientListLoader.Start(IsForceRestart:=True)
  103. DlOptiFineListLoader.Start(IsForceRestart:=True)
  104. DlForgeListLoader.Start(IsForceRestart:=True)
  105. DlNeoForgeListLoader.Start(IsForceRestart:=True)
  106. DlLiteLoaderListLoader.Start(IsForceRestart:=True)
  107. DlFabricListLoader.Start(IsForceRestart:=True)
  108. DlFabricApiLoader.Start(IsForceRestart:=True)
  109. DlOptiFabricLoader.Start(IsForceRestart:=True)
  110. ItemInstall.Checked = True
  111. Case FormMain.PageSubType.DownloadMod
  112. PageDownloadMod.Storage = New CompProjectStorage
  113. PageDownloadMod.Page = 0
  114. CompProjectCache.Clear()
  115. CompFilesCache.Clear()
  116. If FrmDownloadMod IsNot Nothing Then FrmDownloadMod.PageLoaderRestart()
  117. ItemMod.Checked = True
  118. Case FormMain.PageSubType.DownloadPack
  119. PageDownloadPack.Storage = New CompProjectStorage
  120. PageDownloadPack.Page = 0
  121. CompProjectCache.Clear()
  122. CompFilesCache.Clear()
  123. If FrmDownloadPack IsNot Nothing Then FrmDownloadPack.PageLoaderRestart()
  124. ItemPack.Checked = True
  125. Case FormMain.PageSubType.DownloadShader
  126. PageDownloadShader.Storage = New CompProjectStorage
  127. PageDownloadShader.Page = 0
  128. CompProjectCache.Clear()
  129. If FrmDownloadShader IsNot Nothing Then FrmDownloadShader.PageLoaderRestart()
  130. ItemShader.Checked = True
  131. Case FormMain.PageSubType.DownloadResourcePack
  132. PageDownloadResourcePack.Storage = New CompProjectStorage
  133. PageDownloadResourcePack.Page = 0
  134. CompProjectCache.Clear()
  135. If FrmDownloadResourcePack IsNot Nothing Then FrmDownloadResourcePack.PageLoaderRestart()
  136. ItemResourcePack.Checked = True
  137. Case FormMain.PageSubType.DownloadClient
  138. DlClientListLoader.Start(IsForceRestart:=True)
  139. ItemClient.Checked = True
  140. Case FormMain.PageSubType.DownloadOptiFine
  141. DlOptiFineListLoader.Start(IsForceRestart:=True)
  142. ItemOptiFine.Checked = True
  143. Case FormMain.PageSubType.DownloadForge
  144. DlForgeListLoader.Start(IsForceRestart:=True)
  145. ItemForge.Checked = True
  146. Case FormMain.PageSubType.DownloadNeoForge
  147. DlNeoForgeListLoader.Start(IsForceRestart:=True)
  148. ItemNeoForge.Checked = True
  149. Case FormMain.PageSubType.DownloadLiteLoader
  150. DlLiteLoaderListLoader.Start(IsForceRestart:=True)
  151. ItemLiteLoader.Checked = True
  152. Case FormMain.PageSubType.DownloadFabric
  153. DlFabricListLoader.Start(IsForceRestart:=True)
  154. ItemFabric.Checked = True
  155. End Select
  156. Hint("正在刷新……", Log:=False)
  157. End Sub
  158. '点击返回
  159. Private Sub ItemInstall_Click(sender As Object, e As MouseButtonEventArgs) Handles ItemInstall.Click
  160. If Not ItemInstall.Checked Then Exit Sub
  161. FrmDownloadInstall.ExitSelectPage()
  162. End Sub
  163. '展开手动安装
  164. Private Sub ItemHand_Click(sender As Object, e As RouteEventArgs) Handles ItemHand.Changed
  165. If ItemHand.Checked = False Then Exit Sub
  166. e.Handled = True
  167. AniControlEnabled += 1
  168. If Not Setup.Get("HintHandInstall") Then
  169. Setup.Set("HintHandInstall", True)
  170. If MyMsgBox("手动安装包功能提供了 OptiFine、Forge 等组件的 .jar 安装文件下载,但无法自动安装。" & vbCrLf &
  171. "在自动安装页面先选择 MC 版本,然后就可以选择 OptiFine、Forge 等组件,让 PCL 自动进行安装了。", "自动安装提示", "返回自动安装", "继续下载手动安装包") = 1 Then
  172. FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.Download}, FormMain.PageSubType.DownloadInstall)
  173. AniControlEnabled -= 1
  174. Exit Sub
  175. End If
  176. End If
  177. ItemHand.Visibility = Visibility.Collapsed
  178. LabGame.Visibility = Visibility.Collapsed
  179. LabHand.Visibility = Visibility.Visible
  180. ItemClient.Visibility = Visibility.Visible
  181. ItemOptiFine.Visibility = Visibility.Visible
  182. ItemFabric.Visibility = Visibility.Visible
  183. ItemForge.Visibility = Visibility.Visible
  184. ItemNeoForge.Visibility = Visibility.Visible
  185. ItemLiteLoader.Visibility = Visibility.Visible
  186. RunInThread(
  187. Sub()
  188. Thread.Sleep(20)
  189. RunInUiWait(Sub() ItemClient.SetChecked(True, True, True))
  190. AniControlEnabled -= 1
  191. End Sub)
  192. End Sub
  193. '折叠手动安装
  194. Private Sub LabHand_Click(sender As Object, e As MouseButtonEventArgs) Handles LabHand.MouseLeftButtonUp
  195. e.Handled = True
  196. AniControlEnabled += 1
  197. ItemHand.Visibility = Visibility.Visible
  198. LabGame.Visibility = Visibility.Visible
  199. LabHand.Visibility = Visibility.Collapsed
  200. ItemClient.Visibility = Visibility.Collapsed
  201. ItemOptiFine.Visibility = Visibility.Collapsed
  202. ItemNeoForge.Visibility = Visibility.Collapsed
  203. ItemFabric.Visibility = Visibility.Collapsed
  204. ItemForge.Visibility = Visibility.Collapsed
  205. ItemLiteLoader.Visibility = Visibility.Collapsed
  206. RunInThread(
  207. Sub()
  208. Thread.Sleep(20)
  209. RunInUiWait(Sub() ItemInstall.SetChecked(True, True, True))
  210. AniControlEnabled -= 1
  211. End Sub)
  212. End Sub
  213. End Class