PageInstanceLeft.xaml.vb 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. Public Class PageInstanceLeft
  2. Implements IRefreshable
  3. ''' <summary>
  4. ''' 当前显示设置的 MC 版本。
  5. ''' </summary>
  6. Public Shared Instance As McInstance = Nothing
  7. Private Sub PageInstanceLeft_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
  8. PageSetupUI.HiddenRefresh()
  9. End Sub
  10. Public Sub RefreshModDisabled() Handles Me.Loaded
  11. If Instance IsNot Nothing AndAlso Instance.Modable Then
  12. ItemMod.Visibility = Visibility.Visible
  13. ItemModDisabled.Visibility = Visibility.Collapsed
  14. Else
  15. ItemMod.Visibility = Visibility.Collapsed
  16. ItemModDisabled.Visibility = Visibility.Visible
  17. End If
  18. End Sub
  19. #Region "页面切换"
  20. ''' <summary>
  21. ''' 当前页面的编号。从 0 开始计算。
  22. ''' </summary>
  23. Public PageID As FormMain.PageSubType = FormMain.PageSubType.Default
  24. ''' <summary>
  25. ''' 勾选事件改变页面。
  26. ''' </summary>
  27. Private Sub PageCheck(sender As FrameworkElement, e As RouteEventArgs) Handles ItemOverall.Check, ItemMod.Check, ItemModDisabled.Check, ItemSetup.Check, ItemModify.Check, ItemExport.Check
  28. '尚未初始化控件属性时,sender.Tag 为 Nothing,会导致切换到页面 0
  29. '若使用 IsLoaded,则会导致模拟点击不被执行(模拟点击切换页面时,控件的 IsLoaded 为 False)
  30. If sender.Tag IsNot Nothing Then PageChange(Val(sender.Tag))
  31. End Sub
  32. Public Function PageGet(Optional ID As FormMain.PageSubType = -1)
  33. If ID = -1 Then ID = PageID
  34. Select Case ID
  35. Case FormMain.PageSubType.InstanceOverall
  36. If FrmInstanceOverall Is Nothing Then FrmInstanceOverall = New PageInstanceOverall
  37. Return FrmInstanceOverall
  38. Case FormMain.PageSubType.InstanceMod
  39. If FrmInstanceMod Is Nothing Then FrmInstanceMod = New PageInstanceMod
  40. Return FrmInstanceMod
  41. Case FormMain.PageSubType.InstanceModDisabled
  42. If FrmInstanceModDisabled Is Nothing Then FrmInstanceModDisabled = New PageInstanceModDisabled
  43. Return FrmInstanceModDisabled
  44. Case FormMain.PageSubType.InstanceSetup
  45. If FrmInstanceSetup Is Nothing Then FrmInstanceSetup = New PageInstanceSetup
  46. Return FrmInstanceSetup
  47. Case FormMain.PageSubType.InstanceExport
  48. If FrmInstanceExport Is Nothing Then FrmInstanceExport = New PageInstanceExport
  49. Return FrmInstanceExport
  50. Case FormMain.PageSubType.InstanceModify
  51. If FrmDownloadModify Is Nothing Then FrmDownloadModify = New PageDownloadModify
  52. Return FrmDownloadModify
  53. Case Else
  54. Throw New Exception("未知的版本设置子页面种类:" & ID)
  55. End Select
  56. End Function
  57. ''' <summary>
  58. ''' 切换现有页面。
  59. ''' </summary>
  60. Public Sub PageChange(ID As FormMain.PageSubType)
  61. If PageID = ID Then Return
  62. If Instance IsNot Nothing AndAlso McInstanceLock.IsLocked(Instance) Then
  63. Hint("该版本正在被修改,请稍后再切换页面!", HintType.Red)
  64. Return
  65. End If
  66. AniControlEnabled += 1
  67. Try
  68. PageChangeRun(PageGet(ID))
  69. PageID = ID
  70. Catch ex As Exception
  71. Logger.Error(ex, $"切换分页面失败(ID {ID})")
  72. Finally
  73. AniControlEnabled -= 1
  74. End Try
  75. End Sub
  76. Private Shared Sub PageChangeRun(Target As MyPageRight)
  77. AniStop("FrmMain PageChangeRight") '停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter
  78. If Target.Parent IsNot Nothing Then Target.SetValue(ContentPresenter.ContentProperty, Nothing)
  79. FrmMain.PageRight = Target
  80. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnExit()
  81. AniStart({
  82. AaCode(Sub()
  83. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnForceExit()
  84. FrmMain.PanMainRight.Child = FrmMain.PageRight
  85. FrmMain.PageRight.Opacity = 0
  86. End Sub, 130),
  87. AaCode(Sub()
  88. '延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
  89. FrmMain.PageRight.Opacity = 1
  90. FrmMain.PageRight.PageOnEnter()
  91. End Sub, 30, True)
  92. }, "PageLeft PageChange")
  93. End Sub
  94. #End Region
  95. Public Sub Refresh_Click(sender As Object, e As EventArgs) '由边栏按钮匿名调用
  96. Refresh(Val(sender.Tag))
  97. End Sub
  98. Public Sub Refresh() Implements IRefreshable.Refresh
  99. Refresh(FrmMain.PageCurrentSub)
  100. End Sub
  101. Public Sub Refresh(SubType As FormMain.PageSubType)
  102. If Instance IsNot Nothing AndAlso McInstanceLock.IsLocked(Instance) Then
  103. Hint("该版本正在被修改,请稍后再刷新!", HintType.Red)
  104. Return
  105. End If
  106. Select Case SubType
  107. Case FormMain.PageSubType.InstanceMod
  108. PageInstanceMod.Refresh()
  109. ItemMod.Checked = True
  110. Case FormMain.PageSubType.InstanceExport
  111. FrmInstanceExport?.RefreshAll()
  112. ItemExport.Checked = True
  113. Case FormMain.PageSubType.InstanceModify
  114. FrmDownloadModify?.PageLoaderRestart()
  115. ItemModify.Checked = True
  116. End Select
  117. End Sub
  118. Public Sub Reset(sender As Object, e As EventArgs)
  119. If MyMsgBox("是否要初始化该版本的版本独立设置?该操作不可撤销。", "初始化确认",, "取消", IsWarn:=True) = 1 Then
  120. If IsNothing(FrmInstanceSetup) Then FrmInstanceSetup = New PageInstanceSetup
  121. FrmInstanceSetup.Reset()
  122. ItemSetup.Checked = True
  123. End If
  124. End Sub
  125. '加载当前版本将要选择的 Java
  126. Public Shared CurrentJavaWorker As New RedoableWorker(Of Java)(Function(c, p) SelectOrDownloadJava(PageInstanceLeft.Instance, False, c, p))
  127. Public Shared Sub ReloadCurrentJava() Handles Me.Loaded
  128. If AniControlEnabled <> 0 Then Return
  129. If PageInstanceLeft.Instance Is Nothing Then Return
  130. CurrentJavaWorker.Start()
  131. End Sub
  132. End Class