PageDownloadLeft.xaml.vb 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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
  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 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 Exit Sub
  55. AniControlEnabled += 1
  56. Try
  57. PageChangeRun(PageGet(ID))
  58. PageID = ID
  59. Catch ex As Exception
  60. Log(ex, "切换分页面失败(ID " & ID & ")", LogLevel.Feedback)
  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(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. Select Case SubType
  95. Case FormMain.PageSubType.DownloadInstall
  96. DlClientListLoader.Start(IsForceRestart:=True)
  97. DlOptiFineListLoader.Start(IsForceRestart:=True)
  98. DlForgeListLoader.Start(IsForceRestart:=True)
  99. DlNeoForgeListLoader.Start(IsForceRestart:=True)
  100. DlLiteLoaderListLoader.Start(IsForceRestart:=True)
  101. DlFabricListLoader.Start(IsForceRestart:=True)
  102. DlFabricApiLoader.Start(IsForceRestart:=True)
  103. DlOptiFabricLoader.Start(IsForceRestart:=True)
  104. ItemInstall.Checked = True
  105. Case FormMain.PageSubType.DownloadMod
  106. PageDownloadMod.Storage = New CompProjectStorage
  107. PageDownloadMod.Page = 0
  108. CompProjectCache.Clear()
  109. CompFilesCache.Clear()
  110. If FrmDownloadMod IsNot Nothing Then FrmDownloadMod.PageLoaderRestart()
  111. ItemMod.Checked = True
  112. Case FormMain.PageSubType.DownloadPack
  113. PageDownloadPack.Storage = New CompProjectStorage
  114. PageDownloadPack.Page = 0
  115. CompProjectCache.Clear()
  116. CompFilesCache.Clear()
  117. If FrmDownloadPack IsNot Nothing Then FrmDownloadPack.PageLoaderRestart()
  118. ItemPack.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