PageDownloadLeft.xaml.vb 10 KB

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