PageDownloadLeft.xaml.vb 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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 FrameworkElement, e As RouteEventArgs) Handles ItemInstall.Check, ItemMod.Check, ItemPack.Check, ItemResourcePack.Check, ItemShader.Check, ItemDataPack.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.DownloadMod
  23. If FrmDownloadMod Is Nothing Then FrmDownloadMod = New PageDownloadMod
  24. Return FrmDownloadMod
  25. Case FormMain.PageSubType.DownloadPack
  26. If FrmDownloadPack Is Nothing Then FrmDownloadPack = New PageDownloadPack
  27. Return FrmDownloadPack
  28. Case FormMain.PageSubType.DownloadResourcePack
  29. If FrmDownloadResourcePack Is Nothing Then FrmDownloadResourcePack = New PageDownloadResourcePack
  30. Return FrmDownloadResourcePack
  31. Case FormMain.PageSubType.DownloadShader
  32. If FrmDownloadShader Is Nothing Then FrmDownloadShader = New PageDownloadShader
  33. Return FrmDownloadShader
  34. Case FormMain.PageSubType.DownloadDataPack
  35. If FrmDownloadDataPack Is Nothing Then FrmDownloadDataPack = New PageDownloadDataPack
  36. Return FrmDownloadDataPack
  37. Case Else
  38. Throw New Exception("未知的下载子页面种类:" & ID)
  39. End Select
  40. End Function
  41. ''' <summary>
  42. ''' 切换现有页面。
  43. ''' </summary>
  44. Public Sub PageChange(ID As FormMain.PageSubType)
  45. If PageID = ID Then Return
  46. AniControlEnabled += 1
  47. Try
  48. PageChangeRun(PageGet(ID))
  49. PageID = ID
  50. Catch ex As Exception
  51. Log(ex, "切换分页面失败(ID " & ID & ")", LogLevel.Feedback)
  52. Finally
  53. AniControlEnabled -= 1
  54. End Try
  55. End Sub
  56. Private Shared Sub PageChangeRun(Target As MyPageRight)
  57. AniStop("FrmMain PageChangeRight") '停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter
  58. If Target.Parent IsNot Nothing Then Target.SetValue(ContentPresenter.ContentProperty, Nothing)
  59. FrmMain.PageRight = Target
  60. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnExit()
  61. AniStart({
  62. AaCode(
  63. Sub()
  64. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnForceExit()
  65. FrmMain.PanMainRight.Child = FrmMain.PageRight
  66. FrmMain.PageRight.Opacity = 0
  67. End Sub, 130),
  68. AaCode(
  69. Sub()
  70. '延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
  71. FrmMain.PageRight.Opacity = 1
  72. FrmMain.PageRight.PageOnEnter()
  73. End Sub, 30, True)
  74. }, "PageLeft PageChange")
  75. End Sub
  76. #End Region
  77. '强制刷新
  78. Public Sub Refresh(sender As Object, e As EventArgs) '由边栏按钮匿名调用
  79. Refresh(Val(sender.Tag))
  80. End Sub
  81. Public Sub Refresh() Implements IRefreshable.Refresh
  82. Refresh(FrmMain.PageCurrentSub)
  83. End Sub
  84. Public Sub Refresh(SubType As FormMain.PageSubType)
  85. Select Case SubType
  86. Case FormMain.PageSubType.DownloadInstall
  87. DlClientListLoader.Start(IsForceRestart:=True)
  88. DlOptiFineListLoader.Start(IsForceRestart:=True)
  89. DlForgeListLoader.Start(IsForceRestart:=True)
  90. DlNeoForgeListLoader.Start(IsForceRestart:=True)
  91. DlLiteLoaderListLoader.Start(IsForceRestart:=True)
  92. DlFabricListLoader.Start(IsForceRestart:=True)
  93. DlFabricApiLoader.Start(IsForceRestart:=True)
  94. DlOptiFabricLoader.Start(IsForceRestart:=True)
  95. ItemInstall.Checked = True
  96. Case FormMain.PageSubType.DownloadMod
  97. CompProjectCache.Clear()
  98. CompFilesCache.Clear()
  99. If FrmDownloadMod IsNot Nothing Then
  100. FrmDownloadMod.Content.Storage = New CompProjectStorage
  101. FrmDownloadMod.Content.Page = 0
  102. FrmDownloadMod.PageLoaderRestart()
  103. End If
  104. ItemMod.Checked = True
  105. Case FormMain.PageSubType.DownloadPack
  106. CompProjectCache.Clear()
  107. CompFilesCache.Clear()
  108. If FrmDownloadPack IsNot Nothing Then
  109. FrmDownloadPack.Content.Storage = New CompProjectStorage
  110. FrmDownloadPack.Content.Page = 0
  111. FrmDownloadPack.PageLoaderRestart()
  112. End If
  113. ItemPack.Checked = True
  114. Case FormMain.PageSubType.DownloadResourcePack
  115. CompProjectCache.Clear()
  116. CompFilesCache.Clear()
  117. If FrmDownloadResourcePack IsNot Nothing Then
  118. FrmDownloadResourcePack.Content.Storage = New CompProjectStorage
  119. FrmDownloadResourcePack.Content.Page = 0
  120. FrmDownloadResourcePack.PageLoaderRestart()
  121. End If
  122. ItemResourcePack.Checked = True
  123. Case FormMain.PageSubType.DownloadShader
  124. CompProjectCache.Clear()
  125. CompFilesCache.Clear()
  126. If FrmDownloadShader IsNot Nothing Then
  127. FrmDownloadShader.Content.Storage = New CompProjectStorage
  128. FrmDownloadShader.Content.Page = 0
  129. FrmDownloadShader.PageLoaderRestart()
  130. End If
  131. ItemShader.Checked = True
  132. Case FormMain.PageSubType.DownloadDataPack
  133. CompProjectCache.Clear()
  134. CompFilesCache.Clear()
  135. If FrmDownloadDataPack IsNot Nothing Then
  136. FrmDownloadDataPack.Content.Storage = New CompProjectStorage
  137. FrmDownloadDataPack.Content.Page = 0
  138. FrmDownloadDataPack.PageLoaderRestart()
  139. End If
  140. ItemDataPack.Checked = True
  141. End Select
  142. Hint("正在刷新……", Log:=False)
  143. End Sub
  144. '点击返回
  145. Private Sub ItemInstall_Click(sender As Object, e As MouseButtonEventArgs) Handles ItemInstall.Click
  146. If Not ItemInstall.Checked Then Return
  147. FrmDownloadInstall.ExitSelectPage()
  148. End Sub
  149. End Class