PageSetupUI.xaml.vb 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. Public Class PageSetupUI
  2. Private Sub PageSetupUI_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
  3. '重复加载部分
  4. PanBack.ScrollToHome()
  5. ThemeCheckAll(True)
  6. If ThemeDontClick <> 0 Then
  7. Dim NewText As String = Nothing
  8. Select Case ThemeDontClick
  9. Case 1
  10. NewText = "眼瞎白"
  11. Case 2
  12. NewText = "真·滑稽彩"
  13. End Select
  14. For Each Control In PanLauncherTheme.Children
  15. If (TypeOf Control Is MyRadioBox) AndAlso CType(Control, MyRadioBox).IsEnabled Then CType(Control, MyRadioBox).Text = NewText
  16. Next
  17. End If
  18. AniControlEnabled += 1
  19. Refresh() '#4826
  20. AniControlEnabled -= 1
  21. '非重复加载部分
  22. Static Reloaded As Boolean = False
  23. If Reloaded Then Return
  24. Reloaded = True
  25. SliderLoad()
  26. PanLauncherHide.Visibility = Visibility.Collapsed
  27. End Sub
  28. Public Sub Refresh()
  29. Try
  30. SettingService.RefreshSettings(Me)
  31. BackgroundRefresh(False, False)
  32. '标题栏
  33. CheckLogoLeft.Visibility = If(RadioLogoType0.Checked, Visibility.Visible, Visibility.Collapsed)
  34. PanLogoText.Visibility = If(RadioLogoType2.Checked, Visibility.Visible, Visibility.Collapsed)
  35. PanLogoChange.Visibility = If(RadioLogoType3.Checked, Visibility.Visible, Visibility.Collapsed)
  36. '背景音乐
  37. MusicRefreshUI()
  38. '主页
  39. OnMainPageTypeChanged()
  40. Catch ex As NullReferenceException
  41. Logger.Error(ex, "个性化设置项存在异常,已被自动重置", LogBehavior.Alert)
  42. Reset()
  43. Catch ex As Exception
  44. Logger.Error(ex, "重载个性化设置时出错")
  45. End Try
  46. End Sub
  47. Public Sub Reset()
  48. Try
  49. SettingService.ResetSettings(Me)
  50. Logger.Info("已初始化个性化设置!")
  51. Hint("已初始化个性化设置", HintType.Green, False)
  52. Catch ex As Exception
  53. Logger.Error(ex, "初始化个性化设置失败", LogBehavior.Alert)
  54. End Try
  55. Refresh()
  56. End Sub
  57. '背景图片
  58. Private Sub BtnUIBgOpen_Click(sender As Object, e As EventArgs) Handles BtnBackgroundOpen.Click
  59. OpenExplorer(Paths.Base & "PCL\Pictures\")
  60. End Sub
  61. Private Sub BtnBackgroundRefresh_Click(sender As Object, e As EventArgs) Handles BtnBackgroundRefresh.Click
  62. BackgroundRefresh(True, True)
  63. End Sub
  64. Public Sub BackgroundRefreshUI(Show As Boolean, Count As Integer)
  65. If IsNothing(PanBackgroundOpacity) Then Return
  66. If Show Then
  67. PanBackgroundOpacity.Visibility = Visibility.Visible
  68. PanBackgroundBlur.Visibility = Visibility.Visible
  69. PanBackgroundSuit.Visibility = Visibility.Visible
  70. BtnBackgroundClear.Visibility = Visibility.Visible
  71. CardBackground.Title = "背景图片(" & Count & " 张)"
  72. Else
  73. PanBackgroundOpacity.Visibility = Visibility.Collapsed
  74. PanBackgroundBlur.Visibility = Visibility.Collapsed
  75. PanBackgroundSuit.Visibility = Visibility.Collapsed
  76. BtnBackgroundClear.Visibility = Visibility.Collapsed
  77. CardBackground.Title = "背景图片"
  78. End If
  79. CardBackground.TriggerForceResize()
  80. End Sub
  81. Private Sub BtnBackgroundClear_Click(sender As Object, e As EventArgs) Handles BtnBackgroundClear.Click
  82. If MyMsgBox("即将删除背景图片文件夹中的所有文件。" & vbCrLf & "此操作不可撤销,是否确定?", "警告",, "取消", IsWarn:=True) = 1 Then
  83. DirectoryUtils.Delete(Paths.Base & "PCL\Pictures")
  84. BackgroundRefresh(False, True)
  85. Hint("背景图片已清空!", HintType.Green)
  86. End If
  87. End Sub
  88. ''' <summary>
  89. ''' 刷新背景图片及设置页 UI。
  90. ''' </summary>
  91. ''' <param name="IsHint">是否显示刷新提示。</param>
  92. ''' <param name="Refresh">是否刷新图片显示。</param>
  93. Public Shared Sub BackgroundRefresh(IsHint As Boolean, Refresh As Boolean)
  94. Try
  95. '获取可用的图片文件
  96. DirectoryUtils.Create(Paths.Base & "PCL\Pictures\")
  97. Dim Pic As New List(Of String)
  98. For Each File In DirectoryUtils.EnumerateFiles(Paths.Base & "PCL\Pictures\", True)
  99. Dim Extension As String = PathUtils.GetExtension(File)
  100. If Extension <> "ini" AndAlso Extension <> "db" Then Pic.Add(File) '文件夹可能会被加入 .ini 和 thumbs.db
  101. Next
  102. '加载
  103. If Not Pic.Any() Then
  104. If Refresh Then
  105. If FrmMain.ImgBack.Visibility = Visibility.Collapsed Then
  106. If IsHint Then Hint("未检测到可用背景图片!", HintType.Red)
  107. Else
  108. FrmMain.ImgBack.Visibility = Visibility.Collapsed
  109. If IsHint Then Hint("背景图片已清除!", HintType.Green)
  110. End If
  111. End If
  112. If Not IsNothing(FrmSetupUI) Then FrmSetupUI.BackgroundRefreshUI(False, 0)
  113. Else
  114. If Refresh Then
  115. Dim Address As String = RandomOne(Pic)
  116. Try
  117. Logger.Info($"加载背景图片:{Address}")
  118. FrmMain.ImgBack.Background = New MyBitmap(Address)
  119. FrmMain.ImgBack.Visibility = Visibility.Visible
  120. FrmMain.UpdateBackgroundAndTitleBar()
  121. If IsHint Then Hint("背景图片已刷新:" & PathUtils.GetLastPart(Address), HintType.Green, False)
  122. Catch ex As Exception
  123. If ex.Message.Contains("参数无效") Then
  124. Logger.Error($"刷新背景图片失败,该图片文件可能并非标准格式。{vbCrLf}你可以尝试使用画图打开该文件并重新保存,这会让图片变为标准格式。{vbCrLf}文件:{Address}", LogBehavior.Alert)
  125. Else
  126. Logger.Error(ex, $"刷新背景图片失败({Address})", LogBehavior.Alert)
  127. End If
  128. End Try
  129. End If
  130. If Not IsNothing(FrmSetupUI) Then FrmSetupUI.BackgroundRefreshUI(True, Pic.Count)
  131. End If
  132. Catch ex As Exception
  133. Logger.Error(ex, "刷新背景图片时出现未知错误")
  134. End Try
  135. End Sub
  136. '顶部栏
  137. Private Sub BtnLogoChange_Click(sender As Object, e As EventArgs) Handles BtnLogoChange.Click
  138. Dim FileName As String = Dialogs.SelectFile("选择图片", False, filter:={({"png", "jpg", "jpeg", "gif", "webp"}, "常用图片文件")}).FirstOrDefault()
  139. If String.IsNullOrEmpty(FileName) Then Return
  140. Dim TargetPath As String = Paths.Base & "PCL\Logo.png"
  141. Try
  142. '复制文件
  143. FileUtils.Copy(FileName, TargetPath)
  144. '设置当前显示
  145. FrmMain.ImageTitleLogo.Source = Nothing '防止因为 Source 属性前后的值相同而不更新 (#5628)
  146. FrmMain.ImageTitleLogo.Source = TargetPath
  147. Catch ex As Exception
  148. If ex.Message.Contains("参数无效") Then
  149. Logger.Error($"改变标题栏图片失败,该图片文件可能并非标准格式。{vbCrLf}你可以尝试使用画图打开该文件并重新保存,这会让图片变为标准格式。{vbCrLf}文件:{TargetPath}", LogBehavior.Alert)
  150. Else
  151. Logger.Error(ex, "设置标题栏图片失败", LogBehavior.Alert)
  152. End If
  153. FrmMain.ImageTitleLogo.Source = Nothing
  154. End Try
  155. End Sub
  156. Private Sub RadioLogoType3_Check(sender As Object, e As RouteEventArgs) Handles RadioLogoType3.PreviewCheck
  157. If Not (AniControlEnabled = 0 AndAlso e.RaiseByMouse) Then Return
  158. Refresh:
  159. '已有图片则不再选择
  160. Dim TargetPath As String = Paths.Base & "PCL\Logo.png"
  161. If FileUtils.Exists(TargetPath) Then
  162. Try
  163. FrmMain.ImageTitleLogo.Source = Nothing '防止因为 Source 属性前后的值相同而不更新 (#5628)
  164. FrmMain.ImageTitleLogo.Source = TargetPath
  165. Catch ex As Exception
  166. If ex.Message.Contains("参数无效") Then
  167. Logger.Error($"改变标题栏图片失败,该图片文件可能并非标准格式。{vbCrLf}你可以尝试使用画图打开该文件并重新保存,这会让图片变为标准格式。{vbCrLf}文件:{TargetPath}", LogBehavior.Alert)
  168. Else
  169. Logger.Error(ex, "调整标题栏图片失败", LogBehavior.Alert)
  170. End If
  171. FrmMain.ImageTitleLogo.Source = Nothing
  172. e.Handled = True
  173. Try
  174. FileUtils.Delete(TargetPath)
  175. Catch exx As Exception
  176. Logger.Error(exx, "清理错误的标题栏图片失败", LogBehavior.Alert)
  177. End Try
  178. End Try
  179. Return
  180. End If
  181. '没有图片则要求选择
  182. Dim FileName As String = Dialogs.SelectFile("选择图片", False, filter:={({"png", "jpeg", "jpg", "gif", "webp"}, "常用图片文件")}).FirstOrDefault()
  183. If String.IsNullOrEmpty(FileName) Then
  184. FrmMain.ImageTitleLogo.Source = Nothing
  185. e.Handled = True
  186. Else
  187. Try
  188. FileUtils.Copy(FileName, TargetPath)
  189. GoTo Refresh
  190. Catch ex As Exception
  191. Logger.Error(ex, "复制标题栏图片失败", LogBehavior.Alert)
  192. End Try
  193. End If
  194. End Sub
  195. Private Sub BtnLogoDelete_Click(sender As Object, e As EventArgs) Handles BtnLogoDelete.Click
  196. Try
  197. FileUtils.Delete(Paths.Base & "PCL\Logo.png")
  198. RadioLogoType1.SetChecked(True, True)
  199. Hint("标题栏图片已清空!", HintType.Green)
  200. Catch ex As Exception
  201. Logger.Error(ex, "清空标题栏图片失败", LogBehavior.Alert)
  202. End Try
  203. End Sub
  204. '背景音乐
  205. Private Sub BtnMusicOpen_Click(sender As Object, e As EventArgs) Handles BtnMusicOpen.Click
  206. OpenExplorer(Paths.Base & "PCL\Musics\")
  207. End Sub
  208. Private Sub BtnMusicRefresh_Click(sender As Object, e As EventArgs) Handles BtnMusicRefresh.Click
  209. MusicRefreshPlay(True)
  210. End Sub
  211. Public Sub MusicRefreshUI()
  212. If PanBackgroundOpacity Is Nothing Then Return
  213. If MusicAllList.Any Then
  214. PanMusicVolume.Visibility = Visibility.Visible
  215. PanMusicDetail.Visibility = Visibility.Visible
  216. BtnMusicClear.Visibility = Visibility.Visible
  217. CardMusic.Title = "背景音乐(" &
  218. DirectoryUtils.EnumerateFiles(Paths.Base & "PCL\Musics\", True).Count(Function(f) Not {"ini", "jpg", "txt", "cfg", "lrc", "db", "png"}.Contains(PathUtils.GetExtension(f))) &
  219. " 首)"
  220. Else
  221. PanMusicVolume.Visibility = Visibility.Collapsed
  222. PanMusicDetail.Visibility = Visibility.Collapsed
  223. BtnMusicClear.Visibility = Visibility.Collapsed
  224. CardMusic.Title = "背景音乐"
  225. End If
  226. CardMusic.TriggerForceResize()
  227. End Sub
  228. Private Sub BtnMusicClear_Click(sender As Object, e As EventArgs) Handles BtnMusicClear.Click
  229. If MyMsgBox("即将删除背景音乐文件夹中的所有文件。" & vbCrLf & "此操作不可撤销,是否确定?", "警告",, "取消", IsWarn:=True) = 1 Then
  230. RunInThread(
  231. Sub()
  232. Hint("正在删除背景音乐……")
  233. '停止播放音乐
  234. MusicNAudio = Nothing
  235. MusicWaitingList = New List(Of String)
  236. MusicAllList = New List(Of String)
  237. Thread.Sleep(200)
  238. '删除文件
  239. Try
  240. DirectoryUtils.Delete(Paths.Base & "PCL\Musics")
  241. Hint("背景音乐已删除!", HintType.Green)
  242. Catch ex As Exception
  243. Logger.Error(ex, "删除背景音乐失败", LogBehavior.Alert)
  244. End Try
  245. Try
  246. DirectoryUtils.Create(Paths.Base & "PCL\Musics\")
  247. RunInUi(Sub() MusicRefreshPlay(False))
  248. Catch ex As Exception
  249. Logger.Error(ex, "重建背景音乐文件夹失败", LogBehavior.Alert)
  250. End Try
  251. End Sub)
  252. End If
  253. End Sub
  254. Private Sub CheckMusicStart_Change() Handles CheckMusicStart.Change
  255. If AniControlEnabled <> 0 Then Return
  256. If CheckMusicStart.Checked Then CheckMusicStop.Checked = False
  257. End Sub
  258. Private Sub CheckMusicStop_Change() Handles CheckMusicStop.Change
  259. If AniControlEnabled <> 0 Then Return
  260. If CheckMusicStop.Checked Then CheckMusicStart.Checked = False
  261. End Sub
  262. '主页
  263. Private Sub BtnCustomFile_Click(sender As Object, e As EventArgs) Handles BtnCustomFile.Click
  264. Try
  265. If FileUtils.Exists(Paths.Base & "PCL\Custom.xaml") Then
  266. If MyMsgBox("当前已存在布局文件,继续生成教学文件将会覆盖现有布局文件!", "覆盖确认", "继续", "取消", IsWarn:=True) = 2 Then Return
  267. End If
  268. ExtractResources(Paths.Base & "PCL\Custom.xaml", "Custom")
  269. Hint("教学文件已生成!", HintType.Green)
  270. OpenExplorer(Paths.Base & "PCL\Custom.xaml")
  271. Catch ex As Exception
  272. Logger.Error(ex, "生成教学文件失败")
  273. End Try
  274. End Sub
  275. Private Sub BtnCustomRefresh_Click() Handles BtnCustomRefresh.Click
  276. FrmLaunchRight.ForceRefresh()
  277. Hint("已刷新主页!", HintType.Green)
  278. End Sub
  279. Private Sub BtnCustomTutorial_Click(sender As Object, e As EventArgs) Handles BtnCustomTutorial.Click
  280. MyMsgBox("1. 点击 生成教学文件 按钮,这会在 PCL 文件夹下生成 Custom.xaml 布局文件。" & vbCrLf &
  281. "2. 使用记事本等工具打开这个文件并进行修改,修改完记得保存。" & vbCrLf &
  282. "3. 点击 刷新主页 按钮,查看主页现在长啥样了。" & vbCrLf &
  283. vbCrLf &
  284. "你可以在生成教学文件后直接刷新主页,对照着进行修改,更有助于理解。" & vbCrLf &
  285. "直接将主页文件拖进 PCL 窗口也可以快捷加载。", "主页自定义教程")
  286. End Sub
  287. Public Shared Sub OnMainPageTypeChanged()
  288. If Settings.Get(Of Integer)("UiCustomType") = 2 Then Settings.Set("UiCustomType", 0)
  289. If Settings.Get(Of Integer)("UiCustomPreset") > 1 Then Settings.Set("UiCustomPreset", 0)
  290. If FrmSetupUI Is Nothing Then Return
  291. Select Case CInt(Settings.Get(Of Integer)("UiCustomType"))
  292. Case 0 '无
  293. FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
  294. FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
  295. FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
  296. FrmSetupUI.HintCustom.Visibility = Visibility.Collapsed
  297. FrmSetupUI.HintCustomWarn.Visibility = Visibility.Collapsed
  298. Case 1 '本地
  299. FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
  300. FrmSetupUI.PanCustomLocal.Visibility = Visibility.Visible
  301. FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
  302. FrmSetupUI.HintCustom.Visibility = Visibility.Visible
  303. FrmSetupUI.HintCustomWarn.Visibility = If(Settings.Get(Of Boolean)("HintCustomWarn"), Visibility.Collapsed, Visibility.Visible)
  304. FrmSetupUI.HintCustom.Text = $"从 PCL 文件夹下的 Custom.xaml 读取主页内容。{vbCrLf}你可以手动编辑该文件,向主页添加文本、图片、常用网站、快捷启动等功能。"
  305. CustomEventService.SetEventType(FrmSetupUI.HintCustom, CustomEvent.EventType.None)
  306. Case 2 '联网
  307. FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
  308. FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
  309. FrmSetupUI.PanCustomNet.Visibility = Visibility.Visible
  310. FrmSetupUI.HintCustom.Visibility = Visibility.Visible
  311. FrmSetupUI.HintCustomWarn.Visibility = If(Settings.Get(Of Boolean)("HintCustomWarn"), Visibility.Collapsed, Visibility.Visible)
  312. FrmSetupUI.HintCustom.Text = $"从指定网址联网获取主页内容。服主也可以用于动态更新服务器公告。{vbCrLf}如果你制作了稳定运行的联网主页,可以点击这条提示投稿,若合格即可加入预设!"
  313. CustomEventService.SetEventType(FrmSetupUI.HintCustom, CustomEvent.EventType.打开网页)
  314. CustomEventService.SetEventData(FrmSetupUI.HintCustom, "https://github.com/Meloong-Git/PCL/discussions/2528")
  315. Case 3 '预设
  316. FrmSetupUI.PanCustomPreset.Visibility = Visibility.Visible
  317. FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
  318. FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
  319. FrmSetupUI.HintCustom.Visibility = Visibility.Collapsed
  320. FrmSetupUI.HintCustomWarn.Visibility = Visibility.Collapsed
  321. End Select
  322. FrmSetupUI.CardCustom.TriggerForceResize()
  323. End Sub
  324. Private Sub BtnCustomFolder_Click(sender As Object, e As MouseButtonEventArgs) Handles BtnCustomFolder.Click
  325. Dim CustomPath As String = Paths.Base & "PCL\Custom.xaml"
  326. If FileUtils.Exists(CustomPath) Then
  327. OpenExplorer(CustomPath)
  328. Else
  329. OpenExplorer(Paths.Base & "PCL\")
  330. End If
  331. End Sub
  332. '主题自定义
  333. Private Sub RadioLauncherTheme14_Change(sender As Object, e As RouteEventArgs) Handles RadioLauncherTheme14.Changed
  334. If RadioLauncherTheme14.Checked Then
  335. If LabLauncherHue.Visibility = Visibility.Visible Then Return
  336. LabLauncherHue.Visibility = Visibility.Visible
  337. SliderLauncherHue.Visibility = Visibility.Visible
  338. LabLauncherSat.Visibility = Visibility.Visible
  339. SliderLauncherSat.Visibility = Visibility.Visible
  340. LabLauncherDelta.Visibility = Visibility.Visible
  341. SliderLauncherDelta.Visibility = Visibility.Visible
  342. LabLauncherLight.Visibility = Visibility.Visible
  343. SliderLauncherLight.Visibility = Visibility.Visible
  344. Else
  345. If LabLauncherHue.Visibility = Visibility.Collapsed Then Return
  346. LabLauncherHue.Visibility = Visibility.Collapsed
  347. SliderLauncherHue.Visibility = Visibility.Collapsed
  348. LabLauncherSat.Visibility = Visibility.Collapsed
  349. SliderLauncherSat.Visibility = Visibility.Collapsed
  350. LabLauncherDelta.Visibility = Visibility.Collapsed
  351. SliderLauncherDelta.Visibility = Visibility.Collapsed
  352. LabLauncherLight.Visibility = Visibility.Collapsed
  353. SliderLauncherLight.Visibility = Visibility.Collapsed
  354. End If
  355. CardLauncher.TriggerForceResize()
  356. End Sub
  357. Private Sub HSL_Change() Handles SliderLauncherHue.Change, SliderLauncherLight.Change, SliderLauncherSat.Change, SliderLauncherDelta.Change
  358. If AniControlEnabled <> 0 OrElse SliderLauncherSat Is Nothing OrElse Not SliderLauncherSat.IsLoaded Then Return
  359. ThemeRefresh()
  360. End Sub
  361. #Region "功能隐藏"
  362. Private Shared _HiddenForceShow As Boolean = False
  363. ''' <summary>
  364. ''' 是否强制显示被禁用的功能。
  365. ''' </summary>
  366. Public Shared Property HiddenForceShow As Boolean
  367. Get
  368. Return _HiddenForceShow
  369. End Get
  370. Set(value As Boolean)
  371. _HiddenForceShow = value
  372. HiddenRefresh()
  373. End Set
  374. End Property
  375. ''' <summary>
  376. ''' 更新功能隐藏带来的显示变化。
  377. ''' </summary>
  378. Public Shared Sub HiddenRefresh() Handles Me.Loaded
  379. If FrmMain.PanTitleSelect Is Nothing OrElse Not FrmMain.PanTitleSelect.IsLoaded Then Return
  380. Try
  381. '顶部栏
  382. If Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageDownload") AndAlso Settings.Get(Of Boolean)("UiHiddenPageLink") AndAlso Settings.Get(Of Boolean)("UiHiddenPageSetup") AndAlso Settings.Get(Of Boolean)("UiHiddenPageOther") Then
  383. '顶部栏已被全部隐藏
  384. FrmMain.PanTitleSelect.Visibility = Visibility.Collapsed
  385. Else
  386. '顶部栏未被全部隐藏
  387. FrmMain.PanTitleSelect.Visibility = Visibility.Visible
  388. FrmMain.BtnTitleSelect1.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageDownload"), Visibility.Collapsed, Visibility.Visible)
  389. FrmMain.BtnTitleSelect2.Visibility = Visibility.Collapsed 'If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageLink"), Visibility.Collapsed, Visibility.Visible)
  390. FrmMain.BtnTitleSelect3.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageSetup"), Visibility.Collapsed, Visibility.Visible)
  391. FrmMain.BtnTitleSelect4.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageOther"), Visibility.Collapsed, Visibility.Visible)
  392. End If
  393. '功能
  394. FrmLaunchLeft.RefreshButtonsUI()
  395. If FrmSetupUI IsNot Nothing Then
  396. FrmSetupUI.CardSwitch.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenFunctionHidden"), Visibility.Collapsed, Visibility.Visible)
  397. End If
  398. '版本设置子页面
  399. If FrmInstanceLeft IsNot Nothing Then
  400. FrmInstanceLeft.ItemModify.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenFunctionInstanceModify"), Visibility.Collapsed, Visibility.Visible)
  401. End If
  402. '设置子页面
  403. If FrmSetupLeft IsNot Nothing Then
  404. FrmSetupLeft.ItemLaunch.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLaunch"), Visibility.Collapsed, Visibility.Visible)
  405. FrmSetupLeft.ItemUI.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenSetupUi"), Visibility.Collapsed, Visibility.Visible)
  406. FrmSetupLeft.ItemLink.Visibility = Visibility.Collapsed 'If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLink"), Visibility.Collapsed, Visibility.Visible)
  407. FrmSetupLeft.ItemSystem.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenSetupSystem"), Visibility.Collapsed, Visibility.Visible)
  408. '隐藏左边选择卡
  409. Dim AvaliableCount As Integer = 0
  410. If Not Settings.Get(Of Boolean)("UiHiddenSetupLaunch") Then AvaliableCount += 1
  411. If Not Settings.Get(Of Boolean)("UiHiddenSetupUi") Then AvaliableCount += 1
  412. 'If Not Settings.Get(Of Boolean)("UiHiddenSetupLink") Then AvaliableCount += 1
  413. If Not Settings.Get(Of Boolean)("UiHiddenSetupSystem") Then AvaliableCount += 1
  414. FrmSetupLeft.PanItem.Visibility = If(AvaliableCount < 2 AndAlso Not HiddenForceShow, Visibility.Collapsed, Visibility.Visible)
  415. End If
  416. '更多子页面
  417. Dim OtherAvaliableCount As Integer = 0
  418. If Not Settings.Get(Of Boolean)("UiHiddenOtherHelp") Then OtherAvaliableCount += 1
  419. If Not Settings.Get(Of Boolean)("UiHiddenOtherAbout") Then OtherAvaliableCount += 1
  420. If Not Settings.Get(Of Boolean)("UiHiddenOtherTest") Then OtherAvaliableCount += 1
  421. If Not Settings.Get(Of Boolean)("UiHiddenOtherFeedback") Then OtherAvaliableCount += 1
  422. If Not Settings.Get(Of Boolean)("UiHiddenOtherVote") Then OtherAvaliableCount += 1
  423. If FrmOtherLeft IsNot Nothing Then
  424. FrmOtherLeft.ItemHelp.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherHelp"), Visibility.Collapsed, Visibility.Visible)
  425. FrmOtherLeft.ItemFeedback.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherFeedback"), Visibility.Collapsed, Visibility.Visible)
  426. FrmOtherLeft.ItemVote.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherVote"), Visibility.Collapsed, Visibility.Visible)
  427. FrmOtherLeft.ItemAbout.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout"), Visibility.Collapsed, Visibility.Visible)
  428. FrmOtherLeft.ItemTest.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest"), Visibility.Collapsed, Visibility.Visible)
  429. '隐藏左边选择卡
  430. FrmOtherLeft.PanItem.Visibility = If(OtherAvaliableCount < 2 AndAlso Not HiddenForceShow, Visibility.Collapsed, Visibility.Visible)
  431. End If
  432. If OtherAvaliableCount = 1 AndAlso Not HiddenForceShow Then
  433. If Not Settings.Get(Of Boolean)("UiHiddenOtherHelp") Then
  434. FrmMain.BtnTitleSelect4.Text = "帮助"
  435. ElseIf Not Settings.Get(Of Boolean)("UiHiddenOtherAbout") Then
  436. FrmMain.BtnTitleSelect4.Text = "关于"
  437. Else
  438. FrmMain.BtnTitleSelect4.Text = "百宝箱"
  439. End If
  440. Else
  441. FrmMain.BtnTitleSelect4.Text = "更多"
  442. End If
  443. '各个页面的入口
  444. If FrmMain.PageCurrent = FormMain.PageType.InstanceSelect Then FrmSelectRight.BtnEmptyDownload_Loaded()
  445. If FrmMain.PageCurrent = FormMain.PageType.Launch Then FrmLaunchLeft.RefreshButtonsUI()
  446. If FrmMain.PageCurrent = FormMain.PageType.InstanceSetup AndAlso FrmInstanceModDisabled IsNot Nothing Then FrmInstanceModDisabled.BtnDownload_Loaded()
  447. '备注
  448. If FrmSetupUI IsNot Nothing Then FrmSetupUI.CardSwitch.Title = If(HiddenForceShow, "功能隐藏(已暂时关闭,按 F12 以重新启用)", "功能隐藏")
  449. Catch ex As Exception
  450. Logger.Error(ex, "刷新功能隐藏项目失败")
  451. End Try
  452. End Sub
  453. 'UI 协同改变
  454. Private Sub HiddenSetupMain() Handles CheckHiddenPageSetup.Change
  455. '设置主页面
  456. If CheckHiddenPageSetup.Checked Then
  457. '开启
  458. CheckHiddenSetupLaunch.Checked = True
  459. CheckHiddenSetupSystem.Checked = True
  460. CheckHiddenSetupLink.Checked = True
  461. CheckHiddenSetupUI.Checked = True
  462. Else
  463. '关闭
  464. If Settings.Get(Of Boolean)("UiHiddenSetupLaunch") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupUi") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupSystem") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLink") Then
  465. CheckHiddenSetupLaunch.Checked = False
  466. CheckHiddenSetupSystem.Checked = False
  467. CheckHiddenSetupLink.Checked = False
  468. CheckHiddenSetupUI.Checked = False
  469. End If
  470. End If
  471. End Sub
  472. Private Sub HiddenSetupSub() Handles CheckHiddenSetupLaunch.Change, CheckHiddenSetupSystem.Change, CheckHiddenSetupLink.Change, CheckHiddenSetupUI.Change
  473. '设置子页面
  474. If Settings.Get(Of Boolean)("UiHiddenSetupLaunch") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupUi") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupSystem") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLink") Then
  475. '已被全部隐藏
  476. CheckHiddenPageSetup.Checked = True
  477. Else
  478. '未被全部隐藏
  479. CheckHiddenPageSetup.Checked = False
  480. End If
  481. End Sub
  482. Private Sub HiddenOtherMain() Handles CheckHiddenPageOther.Change
  483. '更多主页面
  484. If CheckHiddenPageOther.Checked Then
  485. '开启
  486. CheckHiddenOtherAbout.Checked = True
  487. CheckHiddenOtherTest.Checked = True
  488. CheckHiddenOtherFeedback.Checked = True
  489. CheckHiddenOtherVote.Checked = True
  490. CheckHiddenOtherHelp.Checked = True
  491. Else
  492. '关闭
  493. If Settings.Get(Of Boolean)("UiHiddenOtherHelp") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest") AndAlso
  494. Settings.Get(Of Boolean)("UiHiddenOtherVote") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherFeedback") Then
  495. CheckHiddenOtherAbout.Checked = False
  496. CheckHiddenOtherTest.Checked = False
  497. CheckHiddenOtherFeedback.Checked = False
  498. CheckHiddenOtherVote.Checked = False
  499. CheckHiddenOtherHelp.Checked = False
  500. End If
  501. End If
  502. End Sub
  503. Private Sub HiddenOtherSub(sender As Object, user As Boolean) Handles CheckHiddenOtherHelp.Change, CheckHiddenOtherAbout.Change, CheckHiddenOtherTest.Change
  504. '更多子页面(有具体内容的)
  505. If Settings.Get(Of Boolean)("UiHiddenOtherHelp") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest") Then
  506. '已被全部隐藏
  507. CheckHiddenPageOther.Checked = True
  508. Else
  509. '未被全部隐藏
  510. CheckHiddenPageOther.Checked = False
  511. End If
  512. '修改无具体内容的项
  513. If Not user Then Return
  514. If Settings.Get(Of Boolean)("UiHiddenOtherHelp") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest") Then
  515. CheckHiddenOtherFeedback.Checked = True
  516. CheckHiddenOtherVote.Checked = True
  517. End If
  518. End Sub
  519. Private Sub HiddenOtherNet(sender As Object, user As Boolean) Handles CheckHiddenOtherFeedback.Change, CheckHiddenOtherVote.Change
  520. '更多子页面(无具体内容的)
  521. If Not user Then Return
  522. If Settings.Get(Of Boolean)("UiHiddenOtherHelp") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest") AndAlso
  523. (Not Settings.Get(Of Boolean)("UiHiddenOtherFeedback") OrElse Not Settings.Get(Of Boolean)("UiHiddenOtherVote")) Then
  524. CheckHiddenOtherAbout.Checked = False
  525. CheckHiddenOtherTest.Checked = False
  526. CheckHiddenOtherHelp.Checked = False
  527. End If
  528. End Sub
  529. '警告提示
  530. Private Sub HiddenHint(sender As Object, user As Boolean) Handles CheckHiddenFunctionHidden.Change, CheckHiddenPageSetup.Change, CheckHiddenSetupUI.Change
  531. If AniControlEnabled = 0 AndAlso sender.Checked Then Hint("按 F12 即可暂时关闭功能隐藏设置。千万别忘了,要不然设置就改不回来了……")
  532. End Sub
  533. #End Region
  534. '滑动条
  535. Private Sub SliderLoad()
  536. SliderMusicVolume.GetHintText = Function(v) Math.Ceiling(v * 0.1) & "%"
  537. SliderLauncherTransparent.GetHintText = Function(v) Math.Round(40 + v * 0.1) & "%"
  538. SliderLauncherHue.GetHintText = Function(v) v & "°"
  539. SliderLauncherSat.GetHintText = Function(v) v & "%"
  540. SliderLauncherDelta.GetHintText =
  541. Function(Value As Integer) As String
  542. If Value > 90 Then
  543. Return "+" & (Value - 90)
  544. ElseIf Value = 90 Then
  545. Return 0
  546. Else
  547. Return Value - 90
  548. End If
  549. End Function
  550. SliderLauncherLight.GetHintText =
  551. Function(Value As Integer) As String
  552. If Value > 20 Then
  553. Return "+" & (Value - 20)
  554. ElseIf Value = 20 Then
  555. Return 0
  556. Else
  557. Return Value - 20
  558. End If
  559. End Function
  560. SliderBackgroundOpacity.GetHintText = Function(v) Math.Round(v * 0.1) & "%"
  561. SliderBackgroundBlur.GetHintText = Function(v) v & " 像素"
  562. End Sub
  563. End Class