PageVersionLeft.xaml.vb 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. Public Class PageVersionLeft
  2. ''' <summary>
  3. ''' 当前显示设置的 MC 版本。
  4. ''' </summary>
  5. Public Shared Version As McVersion = Nothing
  6. Public Sub RefreshModDisabled() Handles Me.Loaded
  7. If Version IsNot Nothing AndAlso Version.Modable Then
  8. ItemMod.Visibility = Visibility.Visible
  9. ItemModDisabled.Visibility = Visibility.Collapsed
  10. Else
  11. ItemMod.Visibility = Visibility.Collapsed
  12. ItemModDisabled.Visibility = Visibility.Visible
  13. End If
  14. End Sub
  15. #Region "页面切换"
  16. ''' <summary>
  17. ''' 当前页面的编号。从 0 开始计算。
  18. ''' </summary>
  19. Public PageID As FormMain.PageSubType = FormMain.PageSubType.Default
  20. ''' <summary>
  21. ''' 勾选事件改变页面。
  22. ''' </summary>
  23. Private Sub PageCheck(sender As MyListItem, e As RouteEventArgs) Handles ItemOverall.Check, ItemMod.Check, ItemModDisabled.Check, ItemSetup.Check
  24. '尚未初始化控件属性时,sender.Tag 为 Nothing,会导致切换到页面 0
  25. '若使用 IsLoaded,则会导致模拟点击不被执行(模拟点击切换页面时,控件的 IsLoaded 为 False)
  26. If sender.Tag IsNot Nothing Then PageChange(Val(sender.Tag))
  27. End Sub
  28. Public Function PageGet(Optional ID As FormMain.PageSubType = -1)
  29. If ID = -1 Then ID = PageID
  30. Select Case ID
  31. Case FormMain.PageSubType.VersionOverall
  32. If FrmVersionOverall Is Nothing Then FrmVersionOverall = New PageVersionOverall
  33. Return FrmVersionOverall
  34. Case FormMain.PageSubType.VersionMod
  35. If FrmVersionMod Is Nothing Then FrmVersionMod = New PageVersionMod
  36. Return FrmVersionMod
  37. Case FormMain.PageSubType.VersionModDisabled
  38. If FrmVersionModDisabled Is Nothing Then FrmVersionModDisabled = New PageVersionModDisabled
  39. Return FrmVersionModDisabled
  40. Case FormMain.PageSubType.VersionSetup
  41. If IsNothing(FrmVersionSetup) Then FrmVersionSetup = New PageVersionSetup
  42. Return FrmVersionSetup
  43. Case Else
  44. Throw New Exception("未知的版本设置子页面种类:" & ID)
  45. End Select
  46. End Function
  47. ''' <summary>
  48. ''' 切换现有页面。
  49. ''' </summary>
  50. Public Sub PageChange(ID As FormMain.PageSubType)
  51. If PageID = ID Then Exit Sub
  52. AniControlEnabled += 1
  53. Try
  54. PageChangeRun(PageGet(ID))
  55. PageID = ID
  56. Catch ex As Exception
  57. Log(ex, "切换分页面失败(ID " & ID & ")", LogLevel.Feedback)
  58. Finally
  59. AniControlEnabled -= 1
  60. End Try
  61. End Sub
  62. Private Shared Sub PageChangeRun(Target As MyPageRight)
  63. AniStop("FrmMain PageChangeRight") '停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter
  64. If Target.Parent IsNot Nothing Then Target.SetValue(ContentPresenter.ContentProperty, Nothing)
  65. FrmMain.PageRight = Target
  66. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnExit()
  67. AniStart({
  68. AaCode(Sub()
  69. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnForceExit()
  70. FrmMain.PanMainRight.Child = FrmMain.PageRight
  71. FrmMain.PageRight.Opacity = 0
  72. End Sub, 130),
  73. AaCode(Sub()
  74. '延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
  75. FrmMain.PageRight.Opacity = 1
  76. FrmMain.PageRight.PageOnEnter()
  77. End Sub, 30, True)
  78. }, "PageLeft PageChange")
  79. End Sub
  80. #End Region
  81. Public Sub Refresh(sender As Object, e As EventArgs) '由边栏按钮匿名调用
  82. '强制刷新
  83. Try
  84. CompProjectCache.Clear()
  85. File.Delete(PathTemp & "Cache\LocalMod.json")
  86. Log("[Mod] 由于点击刷新按钮,清理本地 Mod 信息缓存")
  87. Catch ex As Exception
  88. Log(ex, "强制刷新时清理本地 Mod 信息缓存失败")
  89. End Try
  90. If FrmVersionMod IsNot Nothing Then FrmVersionMod.ReloadModList(True) '无需 Else,还没加载刷个鬼的新
  91. ItemMod.Checked = True
  92. Hint("正在刷新……", Log:=False)
  93. End Sub
  94. Public Sub Reset(sender As Object, e As EventArgs)
  95. If MyMsgBox("是否要初始化该版本的版本独立设置?该操作不可撤销。", "初始化确认",, "取消", IsWarn:=True) = 1 Then
  96. If IsNothing(FrmVersionSetup) Then FrmVersionSetup = New PageVersionSetup
  97. FrmVersionSetup.Reset()
  98. ItemSetup.Checked = True
  99. End If
  100. End Sub
  101. End Class