PageDownloadLeft.xaml.vb 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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. Logger.Error(ex, $"切换分页面失败(ID {ID})")
  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. ResourceProject.Cache.Clear()
  86. ResourceVersion.ProjectFilesCache.Clear()
  87. Select Case SubType
  88. Case FormMain.PageSubType.DownloadInstall
  89. DlClientListLoader.Start(IsForceRestart:=True)
  90. DlOptiFineListLoader.Start(IsForceRestart:=True)
  91. DlForgeListLoader.Start(IsForceRestart:=True)
  92. DlNeoForgeListLoader.Start(IsForceRestart:=True)
  93. DlLiteLoaderListLoader.Start(IsForceRestart:=True)
  94. DlFabricListLoader.Start(IsForceRestart:=True)
  95. DlFabricApiLoader.Start(IsForceRestart:=True)
  96. DlOptiFabricLoader.Start(IsForceRestart:=True)
  97. ItemInstall.Checked = True
  98. Case FormMain.PageSubType.DownloadMod
  99. If FrmDownloadMod IsNot Nothing Then
  100. FrmDownloadMod.Content.Storage = New ResourceSearcher.SearchResult
  101. FrmDownloadMod.Content.Page = 0
  102. FrmDownloadMod.PageLoaderRestart()
  103. End If
  104. ItemMod.Checked = True
  105. Case FormMain.PageSubType.DownloadPack
  106. If FrmDownloadPack IsNot Nothing Then
  107. FrmDownloadPack.Content.Storage = New ResourceSearcher.SearchResult
  108. FrmDownloadPack.Content.Page = 0
  109. FrmDownloadPack.PageLoaderRestart()
  110. End If
  111. ItemPack.Checked = True
  112. Case FormMain.PageSubType.DownloadResourcePack
  113. If FrmDownloadResourcePack IsNot Nothing Then
  114. FrmDownloadResourcePack.Content.Storage = New ResourceSearcher.SearchResult
  115. FrmDownloadResourcePack.Content.Page = 0
  116. FrmDownloadResourcePack.PageLoaderRestart()
  117. End If
  118. ItemResourcePack.Checked = True
  119. Case FormMain.PageSubType.DownloadShader
  120. If FrmDownloadShader IsNot Nothing Then
  121. FrmDownloadShader.Content.Storage = New ResourceSearcher.SearchResult
  122. FrmDownloadShader.Content.Page = 0
  123. FrmDownloadShader.PageLoaderRestart()
  124. End If
  125. ItemShader.Checked = True
  126. Case FormMain.PageSubType.DownloadDataPack
  127. If FrmDownloadDataPack IsNot Nothing Then
  128. FrmDownloadDataPack.Content.Storage = New ResourceSearcher.SearchResult
  129. FrmDownloadDataPack.Content.Page = 0
  130. FrmDownloadDataPack.PageLoaderRestart()
  131. End If
  132. ItemDataPack.Checked = True
  133. End Select
  134. Hint("正在刷新……", Log:=False)
  135. End Sub
  136. '点击返回
  137. Private Sub ItemInstall_Click(sender As Object, e As MouseButtonEventArgs) Handles ItemInstall.Click
  138. If Not ItemInstall.Checked Then Return
  139. FrmDownloadInstall.ExitSelectPage()
  140. End Sub
  141. End Class