PageDownloadLeft.xaml.vb 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  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, ItemDataPack.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.DownloadDataPack
  47. If FrmDownloadDataPack Is Nothing Then FrmDownloadDataPack = New PageDownloadDataPack
  48. Return FrmDownloadDataPack
  49. Case FormMain.PageSubType.DownloadShader
  50. If FrmDownloadShader Is Nothing Then FrmDownloadShader = New PageDownloadShader
  51. Return FrmDownloadShader
  52. Case FormMain.PageSubType.DownloadResourcePack
  53. If FrmDownloadResourcePack Is Nothing Then FrmDownloadResourcePack = New PageDownloadResourcePack
  54. Return FrmDownloadResourcePack
  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 Exit Sub
  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. PageDownloadMod.Storage = New CompProjectStorage
  116. PageDownloadMod.Page = 0
  117. CompProjectCache.Clear()
  118. CompFilesCache.Clear()
  119. If FrmDownloadMod IsNot Nothing Then FrmDownloadMod.PageLoaderRestart()
  120. ItemMod.Checked = True
  121. Case FormMain.PageSubType.DownloadPack
  122. PageDownloadPack.Storage = New CompProjectStorage
  123. PageDownloadPack.Page = 0
  124. CompProjectCache.Clear()
  125. CompFilesCache.Clear()
  126. If FrmDownloadPack IsNot Nothing Then FrmDownloadPack.PageLoaderRestart()
  127. ItemPack.Checked = True
  128. Case FormMain.PageSubType.DownloadDataPack
  129. PageDownloadDataPack.Storage = New CompProjectStorage
  130. PageDownloadDataPack.Page = 0
  131. CompProjectCache.Clear()
  132. If FrmDownloadDataPack IsNot Nothing Then FrmDownloadDataPack.PageLoaderRestart()
  133. ItemDataPack.Checked = True
  134. Case FormMain.PageSubType.DownloadShader
  135. PageDownloadShader.Storage = New CompProjectStorage
  136. PageDownloadShader.Page = 0
  137. CompProjectCache.Clear()
  138. If FrmDownloadShader IsNot Nothing Then FrmDownloadShader.PageLoaderRestart()
  139. ItemShader.Checked = True
  140. Case FormMain.PageSubType.DownloadResourcePack
  141. PageDownloadResourcePack.Storage = New CompProjectStorage
  142. PageDownloadResourcePack.Page = 0
  143. CompProjectCache.Clear()
  144. If FrmDownloadResourcePack IsNot Nothing Then FrmDownloadResourcePack.PageLoaderRestart()
  145. ItemResourcePack.Checked = True
  146. Case FormMain.PageSubType.DownloadClient
  147. DlClientListLoader.Start(IsForceRestart:=True)
  148. ItemClient.Checked = True
  149. Case FormMain.PageSubType.DownloadOptiFine
  150. DlOptiFineListLoader.Start(IsForceRestart:=True)
  151. ItemOptiFine.Checked = True
  152. Case FormMain.PageSubType.DownloadForge
  153. DlForgeListLoader.Start(IsForceRestart:=True)
  154. ItemForge.Checked = True
  155. Case FormMain.PageSubType.DownloadNeoForge
  156. DlNeoForgeListLoader.Start(IsForceRestart:=True)
  157. ItemNeoForge.Checked = True
  158. Case FormMain.PageSubType.DownloadLiteLoader
  159. DlLiteLoaderListLoader.Start(IsForceRestart:=True)
  160. ItemLiteLoader.Checked = True
  161. Case FormMain.PageSubType.DownloadFabric
  162. DlFabricListLoader.Start(IsForceRestart:=True)
  163. ItemFabric.Checked = True
  164. End Select
  165. Hint("正在刷新……", Log:=False)
  166. End Sub
  167. '点击返回
  168. Private Sub ItemInstall_Click(sender As Object, e As MouseButtonEventArgs) Handles ItemInstall.Click
  169. If Not ItemInstall.Checked Then Exit Sub
  170. FrmDownloadInstall.ExitSelectPage()
  171. End Sub
  172. '展开手动安装
  173. Private Sub ItemHand_Click(sender As Object, e As RouteEventArgs) Handles ItemHand.Changed
  174. If ItemHand.Checked = False Then Exit Sub
  175. e.Handled = True
  176. AniControlEnabled += 1
  177. If Not Setup.Get("HintHandInstall") Then
  178. Setup.Set("HintHandInstall", True)
  179. If MyMsgBox("手动安装包功能提供了 OptiFine、Forge 等组件的 .jar 安装文件下载,但无法自动安装。" & vbCrLf &
  180. "在自动安装页面先选择 MC 版本,然后就可以选择 OptiFine、Forge 等组件,让 PCL 自动进行安装了。", "自动安装提示", "返回自动安装", "继续下载手动安装包") = 1 Then
  181. FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.Download}, FormMain.PageSubType.DownloadInstall)
  182. AniControlEnabled -= 1
  183. Exit Sub
  184. End If
  185. End If
  186. ItemHand.Visibility = Visibility.Collapsed
  187. LabGame.Visibility = Visibility.Collapsed
  188. LabHand.Visibility = Visibility.Visible
  189. ItemClient.Visibility = Visibility.Visible
  190. ItemOptiFine.Visibility = Visibility.Visible
  191. ItemFabric.Visibility = Visibility.Visible
  192. ItemForge.Visibility = Visibility.Visible
  193. ItemNeoForge.Visibility = Visibility.Visible
  194. ItemLiteLoader.Visibility = Visibility.Visible
  195. RunInThread(
  196. Sub()
  197. Thread.Sleep(20)
  198. RunInUiWait(Sub() ItemClient.SetChecked(True, True, True))
  199. AniControlEnabled -= 1
  200. End Sub)
  201. End Sub
  202. '折叠手动安装
  203. Private Sub LabHand_Click(sender As Object, e As MouseButtonEventArgs) Handles LabHand.MouseLeftButtonUp
  204. e.Handled = True
  205. AniControlEnabled += 1
  206. ItemHand.Visibility = Visibility.Visible
  207. LabGame.Visibility = Visibility.Visible
  208. LabHand.Visibility = Visibility.Collapsed
  209. ItemClient.Visibility = Visibility.Collapsed
  210. ItemOptiFine.Visibility = Visibility.Collapsed
  211. ItemNeoForge.Visibility = Visibility.Collapsed
  212. ItemFabric.Visibility = Visibility.Collapsed
  213. ItemForge.Visibility = Visibility.Collapsed
  214. ItemLiteLoader.Visibility = Visibility.Collapsed
  215. RunInThread(
  216. Sub()
  217. Thread.Sleep(20)
  218. RunInUiWait(Sub() ItemInstall.SetChecked(True, True, True))
  219. AniControlEnabled -= 1
  220. End Sub)
  221. End Sub
  222. End Class