PageDownloadLeft.xaml.vb 9.4 KB

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